创建型模式之抽象工厂模式

(复习用,不适合初学。复习用,不适合初学。复习用,不适合初学。)

  1. 定义(Abstract Factory Pattern):提供一个创建一系列(族)相关或相互依赖对象的接口,而无需指定它们具体的类。(Provide an interface for creating families of related or dependent objects whithout specifying their concrete classes.)

  2. 角色:
    ①AbstractFactory(抽象工厂)
    抽象工厂用于声明生成抽象产品的方法,在一个抽象工厂中可以定义一组方法,每一个方法对应一个产品等级结构。
    ②ConcreteFactory(具体工厂)
    具体工厂实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。
    ③AbstractProduct(抽象产品)
    抽象产品为每种产品声明接口,在抽象产品中定义了产品的抽象业务方法。
    ④ConcreteProduct(具体产品)
    具体产品定义具体工厂生产的具体产品对象,实现抽象产品接口中定义的业务方法。

  3. 解决方案(类图)

    抽象工厂模式类图

    产品族:A1、B1为一个产品族,A2、B2为一个产品族。(抽象工厂适用于这种情况:系统往往只需要用到一个产品族,可以更换,但一次只用一个。例如:皮肤)
    产品等级结构:A1、A2为一个产品等级结构,B1、B2为一个。

  4. 优缺点
    ①优点:
    (1)隔离了具体类的生成,更换一个具体工厂变得相对容易。另外,抽象工厂模式可以实现高内聚低耦合的设计目的。
    (2)当一个产品族中的多个对象被设计成一起工作时,能够保证客户端始终只使用同一个产品族中的对象。
    (3)增加新的具体工厂和产品族很方便,符合“开闭原则”。
    ②缺点:
    (1)增加新的产品对象时,需要修改所有的抽象工厂和具体工厂。

  5. 适用环境
    ①一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。
    ②系统中有多于一个产品族,而每次只使用其中某一个产品族。
    ③属于同一个产品族的产品将在一起使用。
    ④系统提供一个产品类的库,所有的产品以同样的接口出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值