父博文地址:设计模式 - Design Patterns
一、是什么?
作用:
当我需要创建一个产品家族(很多产品)时,我可以使用抽象工厂。
客户通过抽象接口来创建产品家族,而不需要知道实际产出的具体产品类型。
实现了解耦客户和具体产品。
行为
- 定义一个抽象工厂接口,每个抽象工厂的子类都能创建所有产品家族的产品。
二、实例
上面类图的实现
其它代码就不给了按照类图就能写出来,这里只给出客户的代码:
public class Client { public static void main(String[] args) { // 客户选择使用某一个具体的工厂 AbstractFactory abstractFactory = new ConcreteFactory1(); // 然后就可以任意创建产品族中的产品,而不需要知道具体的产品(只知道抽象产品AbstractProductA/AbstractProductB) AbstractProductA productA = abstractFactory.createProductA(); System.out.println(productA.getClass().getSimpleName()); AbstractProductB productB = abstractFactory.createProductB(); } }
三、问答
抽象工厂的每个方法,看起来都像是工厂方法?
没错,就是这样。
抽象工厂和工厂方法创建对象方式的不同?
工厂方法在类(
Class
)层面,通过继承以及覆盖来创建对象。新增一个产品时只需要新建一个Class
。抽象工厂在组合(
Composition
)层面。新增一个产品必须改变接口以及重新实现子工厂的方法。新增时有以上差别,只是因为工厂方法只有一个抽象产品,而抽象工厂有多个抽象产品。