【设计模式】生成器模式

生成器模式

  • 生成器模式的定义:
    • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
  • 要实现同样的构建过程可以创建不同的表现,那么一个自然的思路就是先把构建过程独立出来,在生成器模式中把它称为指导者,有它来指导装配过程,但是不负责每步具体的实现。当然,光是有指导者是不够的,必须要有能具体实现每步的对象,在生成器模式中称这些实现对象为生成器
  • 在这里插入图片描述
    • Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作
    • ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法
    • Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象
    • Product:产品,表示被生成器构建的复杂对象,包含多个部件
      /**生成器接口,定义创建一个产品对象所需的各个部件的操作 */
      public interface Builder {
          /**示意方法,构建某个部件 */
          public void buildPart();
      }

      /**具体的生成器实现对象 */
      public class ConcreteBuilder implements Builder {
          /**生成器最终构建的产品对象 */
          private Product resultProduct;
          /**获取生成器最终构建的产品对象 */
          public Product getResult() {
              return resultProduct;
          }
          public void builderPart() {
              // 构建某个部件的功能处理
          }
      }

      /**被构建的产品对象的接口 */
      public interface Product {
          // 定义产品的操作
      }

      /**指导者,指导使用生成器的接口来构建产品的对象 */
      public class Director {
          /**持有当前需要使用的生成器对象 */
          private Builder builder;
          /**构造方法,传入生成器对象 */
          public Director(Builder builder) {
              this.builder = builder;
          }
          /**示意方法,指导生成器构建最终的产品对象 */
          public void construct() {
              builder.builderPart();
          }
      }
  • 生成器模式的功能
    • 构建复杂的产品,而且是细化的、分步骤的构建产品,也就是生成器模式重在一步一步解决构建复杂对象的问题
    • 更为重要的是,这个构建的过程是统一的、固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程就能构造出不同的产品来
  • 生成器模式的构建
    • 一个部分是Builder接口,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去
    • 另外一个部分是Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行
  • 不管如何变化,Builder模式都存在这么两个部分,一个部分是部件构造和产品装配,另外一个部分是整体构建的算法
  • 在Director实现整体构建算法时,遇到需要创建和组合具体部位的时候,就会把这些功能通过委托交给Builder去完成
  • 生成器模式的使用
    • 应用生成器模式的时候,可以让客户端创建Director,在Director里面封装整体构建算法,然后让Director去调用Builder,让Builder来封装具体部件的构建功能
    • 还有一种退化的情况,就是让客户端和Director融合起来,让客户端直接去操作Builder,就好像是指导者自己想要给自己构建产品一样
    • 在这里插入图片描述
  • 生成器模式的优点
    • 松散耦合
    • 可以很容易的改变产品的内部表示
    • 更好的复用性
  • 生成器模式的本质
    • 分离整体构建算法和部件构造
  • 生成器模式的重心还是在于分离整体构建算法和部件构造,而分离步骤构建对象不过是整体构建算法的一个简单表现,或者说是一个附带产物
  • 何时选用生成器模式
    • 如果创建对象的算法,应该独立于该对象的组成部分以及它们的装配方式时
    • 如果同一个构建过程有着不同的表示时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值