简单工厂的缺点是当新增实例的时候,需要修改已有的代码,而且一个工厂负责了太多类的创建,不符合单一职责。
工厂方法模式将工厂方法抽象出来,成为单独的接口,然后每种类都对应一个工厂子类,当新增种类的时候,只需要新增工厂子类即可。
示例
产品类
public class Animal {
private String name;
}
public class Cat extends Animal{
}
public class Dog extends Animal{
}
工厂总类
public interface AnimalFactory {
Animal getAnimal();
}
产品对应子类
public class CatFactory implements AnimalFactory{
@Override
public Animal getAnimal() {
return new Cat();
}
}
public class DogFactory implements AnimalFactory {
@Override
public Animal getAnimal() {
return new Dog();
}
}
测试类
public class Test {
public static void main(String[] args) {
AnimalFactory catFactory = new CatFactory();
catFactory.getAnimal();
}
}