设计模式-可复用面向对象软件的基础读书笔记-创建型模式

主旋律

将关于该系统使用哪些具体的类的信息封装起来
隐藏了这些类的实例是如何被创建和放在一起的


Abstract Factory 抽象工厂

意图

提供一个创建一系列相关或互相依赖对象的接口 而无需制定他们具体的类

结构图
在这里插入图片描述

协作

  1. 通常运行时创建一个ConcreteFactory类的实例
  2. 产品对象的创建延迟到子类

问题

  1. 通常难以支持新种类的产品 因为AbstractFactory确定了可以创建的产品集合 支持新的产品需要扩展该工厂接口 涉及到所有子类的改变

实现

  1. 通常工厂作为单例 通常一个产品系列只需要一个工厂
  2. 通常AbstractFactory会定义一个工厂方法(Factory Method) 具体工厂也可以使用Prototype模式来实现
    在基于原型的方法中 可以使得不是每个新的产品系列都需要一个新的具体工厂类
  3. 定义可扩展的工厂可以解决上述难以扩展的问题
    这种方法是在创建对象的接口增加一个类型参数 该参数指定创建何种对象
    这样的情况下AbstractFactory只需要一个Make即可 这就是前面在第二点中所说的基于Prototype的工厂

Builder 生成器

意图 讲一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的不同的表示

结构图
在这里插入图片描述
在这里插入图片描述

协作

  1. 客户端创建Director对象 并使用他所想要的Builder进行配置
  2. 产品部件被生成 导向器会通知生成器
  3. 生成器处理导向器的请求 将部件添加到产品中
  4. 客户端从生成器检索产品

实现

  1. 需要访问之前已经构造好的部件产品 比如在构建PartB需要访问前一个步骤构建的PartA
    通常在这种情况下 生成器会返回一个子节点个导向者 然后导向者将他们回传给生成者去创建父节点
  2. 一般使用生成器生成的产品差异比较大 基本不需要公共父类
  3. Builder父类一般为缺省的空方法
    比如c++中不声明为纯虚函数而是定义为空方法 可以是子类只定义自己感兴趣的操作

相关模式

  1. Composite通常是用Builder生成的
  2. Abstract Factory 注重多个系列的产品对象 Builder着重一步步构造一个复杂对象
    Abstract Factory 的产品是立刻返回的 Buil
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值