标签:
动物抽象类:publicabstract Animal { public abstract void eat(); }
工厂接口:publicinterface Factory {public abstract Animal createAnimal();}
具体狗类:publicclass Dog extends Animal {}
具体猫类:publicclass Cat extends Animal {}
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就制造了一个专门的类来创建对象。发现每次修改(主要是后期添加)工厂代码太麻烦,用工厂方法改进,针对每一个具体的实现提供一个具体工厂。
狗工厂:publicclass DogFactoryimplements Factory {
public Animal createAnimal(){…}
}
猫工厂:publicclass CatFactoryimplements Factory {
public Animal createAnimal(){…}
}
package 创建型_工厂方法模式;
public abstract class Animal {
public abstract void eat();
}
package 创建型_工厂方法模式;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
package 创建型_工厂方法模式;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
package 创建型_工厂方法模式;
public interface Factory {
public abstract Animal createAnimal();
}
package 创建型_工厂方法模式;
//这个工厂主要造狗,但是别人不知道,因为是返回Animal
public class DogFactory implements Factory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
专门创建猫工厂的CatFactory类:package 创建型_工厂方法模式;
//专门创建猫工厂
public class CatFactory implements Factory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
package 创建型_工厂方法模式;
public class AnimalMain {
public static void main(String[] args) {
//需求:我要买只狗
Factory factory = new DogFactory();
Animal animal = factory.createAnimal();
animal.eat();
System.out.println("------------");
//需求:我要买只猫
factory = new CatFactory();//要买猫的话,这里程序就把工厂给换成造猫的那个工厂了
animal = factory.createAnimal();
animal.eat();
}
}
标签:
原文地址:http://blog.csdn.net/u012110719/article/details/45421873