介绍
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类
使用
public class Factory {
public static void main(String[] args) {
AnimalFactory factory = new PigFactory();
Animal pig = factory.create();
pig.call();
factory = new DuckFactory();
Animal duck = factory.create();
duck.call();
}
}
/**
* 动物
*/
interface Animal{
void call();
}
/**
* 猪
*/
class Pig implements Animal{
public void call() {
System.out.println("猪叫");
}
}
/**
* 鸭子
*/
class Duck implements Animal{
public void call() {
System.out.println("鸭子叫");
}
}
/**
* 动物工厂
*/
interface AnimalFactory{
Animal create();
}
/**
* 猪工厂
*/
class PigFactory implements AnimalFactory{
public Animal create() {
return new Pig();
}
}
/**
* 鸭子工厂
*/
class DuckFactory implements AnimalFactory{
public Animal create() {
return new Duck();
}
}
复制代码
特点
跟简单工厂模式相比,将逻辑判断从工厂内部转移到到调用者进行,更加符合开闭原则