(复习用,不适合初学。复习用,不适合初学。复习用,不适合初学。)
定义(Abstract Factory Pattern):提供一个创建一系列(族)相关或相互依赖对象的接口,而无需指定它们具体的类。(Provide an interface for creating families of related or dependent objects whithout specifying their concrete classes.)
角色:
①AbstractFactory(抽象工厂)
抽象工厂用于声明生成抽象产品的方法,在一个抽象工厂中可以定义一组方法,每一个方法对应一个产品等级结构。
②ConcreteFactory(具体工厂)
具体工厂实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。
③AbstractProduct(抽象产品)
抽象产品为每种产品声明接口,在抽象产品中定义了产品的抽象业务方法。
④ConcreteProduct(具体产品)
具体产品定义具体工厂生产的具体产品对象,实现抽象产品接口中定义的业务方法。解决方案(类图)
产品族:A1、B1为一个产品族,A2、B2为一个产品族。(抽象工厂适用于这种情况:系统往往只需要用到一个产品族,可以更换,但一次只用一个。例如:皮肤)
产品等级结构:A1、A2为一个产品等级结构,B1、B2为一个。优缺点
①优点:
(1)隔离了具体类的生成,更换一个具体工厂变得相对容易。另外,抽象工厂模式可以实现高内聚低耦合的设计目的。
(2)当一个产品族中的多个对象被设计成一起工作时,能够保证客户端始终只使用同一个产品族中的对象。
(3)增加新的具体工厂和产品族很方便,符合“开闭原则”。
②缺点:
(1)增加新的产品对象时,需要修改所有的抽象工厂和具体工厂。适用环境
①一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。
②系统中有多于一个产品族,而每次只使用其中某一个产品族。
③属于同一个产品族的产品将在一起使用。
④系统提供一个产品类的库,所有的产品以同样的接口出现。