概述
英文:Provide an interface for creating families of related ordependent objects without specifying their concreteclasses.
译文:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类
角色
抽象工厂(Abstract Factory)
该角色是抽象工厂模式的核心,与应用系统无关,任何创建对象的工厂类必须实现这个接口。
具体工厂(Concrete Factory)
该角色实现了抽象工厂接口,含有选择合适的产品对象的逻辑,并且受到应用程序的调用以创建产品对象。
抽象产品(Abstract Product)
该角色负责定义产品的共性,实现对产品最抽象的定义。
具体产品(Concrete Product)
该角色实现抽象产品角色所声明的接口,抽象工厂模式所创建的任何产品对象都是某个具体产品角色的实例。
应用
优点
1、产品族内的约束为非公开状态,在不同的工厂中,各种产品可能具有不同的相互依赖关系,这些依赖关系由工厂封装在其内部,对于工厂的使用者是不可见的。
2、生产线的扩展非常容易,如果要针对同一产品族建立新的生产线,只需要实现产品族中的所有产品接口并建立新的工厂类即可
缺点
产品族本身的扩展非常困难,如果需要在产品族中增加一个新的产品类型,则需要修改多个接口,并且会影响已有的工厂类。
使用场景
当一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。
