Animal
package july.star.thread21;
/**
* Animal抽象类
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午8:17:28
* @version 1.0
*/
public abstract class Animal {
//抽象方法,动物是抽象的
public abstract void eat();
}
Cat
package july.star.thread21;
/**
* Cat类,继承Animal
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午8:18:22
* @version 1.0
*/
public class Cat extends Animal{
//实现该方法就不是抽象了
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
CatFactory:
package july.star.thread21;
/**
* CatFactory
* 创建Cat的工厂类
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午8:21:27
* @version 1.0
*/
public class CatFactory implements AnimalFactory{
@Override
public Animal createAnimal() {
//由工厂创建Cat类
return new Cat();
}
}
Dog:
package july.star.thread21;
/**
* Dog类,继承抽象Animal
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午8:19:41
* @version 1.0
*/
public class Dog extends Animal{
public void eat(){
System.out.println("狗吃肉");
}
}
DogFactory
package july.star.thread21;
/**
* DogFactory
* 创建Dog工厂类
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午8:22:28
* @version 1.0
*/
public class DogFactory implements AnimalFactory{
@Override
public Animal createAnimal() {
//创建Dog,返回Animal,不知道创建了什么类,输出才知道
return new Dog();
}
}
AnimalDemo
package july.star.thread21;
/**
* AnimalDemo
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午8:23:22
* @version 1.0
*/
public class AnimalDemo {
public static void main(String[] args) {
//创建Dog工厂
DogFactory a = new DogFactory();
//调用方法创建动物,但不知道是创建了什么动物
Animal animal = a.createAnimal();
animal.eat();//输出dog类方法,因为调用的是Dog工厂创建
System.out.println("-----------");
CatFactory c = new CatFactory();
Animal cc = c.createAnimal();
cc.eat();
}
}
设计模式之工厂方法模式
最新推荐文章于 2024-01-15 00:00:00 发布