提供一个创建一系列相关或互相依赖的接口,而无需指定它们具体的类
定义于《设计模式》
AbstractFactory
----声明一个创建抽象产品对象的操作接口
ConcreteFactory
----实现创建具体产品对象的操作
AbstractProduct
----为一类产品对象声明一个接口
ConcreteProduct
----定义一个将被相应的具体工厂创建的产品对象
Client
----仅使用由AbstractFactory和AbstractProduct类声明的接口
协作
通常在运行时创建一个ConcreteFactory类的实例,这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体的工厂。
AbstractFactory将产品对象的创建推迟到它的ConcreteFactory子类。
意义
用一个具体工厂创建一组具有类似特性的产品。
与工厂方法的区别
抽象工厂 工厂方法
------------------------------------------------------------------------------------------------------------------------
通过对象组合创建抽象产品 通过类继承创建抽象产品
------------------------------------------------------------------------------------------------------------------------
创建多系列产品 创建一种产品
------------------------------------------------------------------------------------------------------------------------
必须修改父类接口才能添加新产品 子类化创建者并重载工厂方法以创建新产品
------------------------------------------------------------------------------------------------------------------------