目录
- 简介
- 包含角色
- UML类图
- java实现
- 优缺点
- 工厂模式和抽象工厂模式区别
1. 简介
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂
2. 包含角色
2.1 抽象产品角色:
担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口
2.2 具体产品角色:
抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑
2.3 抽象工厂角色:
担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的
2.4 具体工厂角色:
这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的
3. UML类图
4. java实现
4.1 抽象产品角色(ProductA)
/**
* @program: pattern
* @description: 抽象产品角色
* @author: chengqj
* @create: 2018-08-06 19:58
**/
public interface ProductA {
}
4.2 抽象产品角色(ProductB)
/**
* @program: pattern
* @description: 抽象产品角色
* @author: chengqj
* @create: 2018-08-06 19:58
**/
public interface ProductB {
}
4.3 具体产品角色(EntityProductA)
/**
* @program: pattern
* @description: 具体产品角色
* @author: chengqj
* @create: 2018-08-06 19:59
**/
public class EntityProductA implements ProductA{
}
4.4 具体产品角色(EntityProductB)
/**
* @program: pattern
* @description: 具体产品角色
* @author: chengqj
* @create: 2018-08-06 20:00
**/
public class EntityProductB implements ProductB{
}
4.5 抽象工厂角色(AbstractFactory)
/**
* @program: pattern
* @description: 抽象产品角色
* @author: chengqj
* @create: 2018-08-06 20:01
**/
public interface AbstractFactory {
ProductA getProductAInstance();
ProductB getProductBInstance();
}
4.6 具体工厂角色(EntityFactory)
/**
* @program: pattern
* @description: 具体产品角色
* @author: chengqj
* @create: 2018-08-06 20:02
**/
public class EntityFactory implements AbstractFactory {
@Override
public ProductA getProductAInstance() {
return new EntityProductA();
}
@Override
public ProductB getProductBInstance() {
return new EntityProductB();
}
}
4.7 测试
public static void main(String[] args) {
AbstractFactory factory = new EntityFactory();
ProductA productA = factory.getProductAInstance();
ProductB productB = factory.getProductBInstance();
}
5.8 扩展流程
- 新的具体产品类分别继承ProductA和ProductB
- 实现新的AbstractFactory接口,分别创建新的具体产品角色
6. 优缺点
6.1 优点:
除了工厂模式中的优点之外,可以在类的内部对产品族进行约束
6.2 缺点:
产品族的扩展将是一件十分费力的事情, 假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改
7. 工厂模式和抽象工厂模式区别
7.1 工厂方法模式
- 一个抽象产品类,可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类只能创建一个具体产品类的实例。
7.2 抽象工厂模式:
- 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类可以创建多个具体产品类的实例
7.3 区别
- 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
- 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。