将多个工厂合并成一个,完成一系列多种实体的生产
如果说一个实体接口代表一种实体
那么简单工厂模式就是一种实体对应一个工厂,多种实体就需要多个工厂
当不同种类的实体有对应关系时,就可以合并成一个工厂
事例
每种水果都有自己的包装
实体关系如图:
实体类
public interface Bag {
}
public class AppleBag implements Bag {
}
public class OrangeBag implements Bag {
}
工厂类
public interface FruitFactory {
Fruit getFruit();
Bag getBag();
}
public class AppleFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Apple();
}
@Override
public Bag getBag() {
return new AppleBag();
}
}
public class OrangeFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Orange();
}
@Override
public Bag getBag() {
return new OrangeBag();
}
}
客户调用
// 苹果
public void produceApple(){
AppleFactory appleFactory = new AppleFactory();
Fruit fruit = appleFactory.getFruit();
Bag bag = appleFactory.getBag();
// 用Bag将Fruit打包的业务
}
// 柑橘
public void produceOrange() {
OrangeFactory orangeFactory = new OrangeFactory();
Fruit fruit = orangeFactory.getFruit();
Bag bag = orangeFactory.getBag();
// 用Bag将Fruit打包的业务
}
总结
优点(与工厂方法模式比)
- 扩展性强
- 可对应多种实体
缺点
- 新增实体接口时,要修改工厂类
工厂模式总结
原则
- 解耦。将对象的创建和使用分离
- 黑盒创建。负责对象创建的整个过程
- 面向接口编程。返回接口,而不是实现类