每个实体类都有自己的工厂
生产哪个类,就用哪个工厂
事例
项目结构如图:
实体类
public interface Fruit {
}
public class Apple implements Fruit {
}
public class Orange implements Fruit {
}
工厂类
public interface FruitFactory {
Fruit getFruit();
}
public class AppleFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Apple();
}
}
public class OrangeFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Orange();
}
}
总结
优点(与简单工厂模式比)
- 扩展水果品种时,不需要修改已有代码
- 单一职责原则 符合。一个工厂只生产一个品种
缺点
- 工厂类太多。新增实体接口时,要新增多个工厂(因为每个实体都要一个工厂)
- 使用工厂类时易混乱