JAVA设计模式-读书笔记四(建造者模式)

建造者模式

1          建造者模式特点:

建造者模式可以将一个产品的内部对象与产品的生成过程分割开,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

2          产品内部表象:

一个产品常有不同的组成成分做为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常叫做产品的内部表象。不同的产品可以有不同的内部表象,也就是不同的零件。建造者模式可以使客户端不需要知道所生成的产品对象有哪些零件,每个产品对应的零件彼此有何不同,是怎么建造出来的,以及怎样组成产品的。

3          简略类图: 略

4          建造者模式的角色:

4.1         抽象建造者(Builder):给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。

4.2         具体建造者(Concrete Builder):与应用程序紧密相关的一些类,它们调用创建产品的实例。该角色的主要任务包括:

1、         实现抽象建造者(Builder)的接口,给出一步一步地完成创建产品实例的操作。

2、         在建造过程完成后,提供产品的实例。

4.3         导演者(Director):调用具体的建造者(Concrete Builder)以创建产品对象,该角色没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者(Concrete Builder)。该角色的与客户端打交道,并且把客户端的创建产品的请求划分为对各个零件的建造请求,然后在把这些请求委派给具体的建造者角色。

4.4         产品(Product):建造中的复杂对象。

5          源码实现:

5.1         导演者(Director)

package org.pattern.builder;

 

public class Director {

 

  private Builder builder;

 

  /*

   * 产品构造方法,负责调用各个零件的建造方法;提供给客户端的主要接口

   */

  public void construct(){

     

      builder=new ConcreteBuilder();

      builder.buildPart1();

      builder.buildPart2();

      builder.retrieveResult();

  }

}

5.2         具体建造者(Concrete Builder):

package org.pattern.builder;

 

public class ConcreteBuilder extends Builder {

 

    private Product product;

   

    @Override

    public void buildPart1() {

       

       

    }

 

    @Override

    public void buildPart2() {

       

       

    }

 

    @Override

    public Product retrieveResult() {

       

        return product;

    }

 

}

}

5.3         抽象建造者(Builder)

package org.pattern.builder;

 

public abstract class Builder {

 

  /*

   * 产品零件构造方法

   */

  public abstract void buildPart1();

 

  /*

   * 产品零件构造方法

   */

  public abstract void buildPart2();

 

 

  /*

   * 产品返回方法

   */

  public abstract Product retrieveResult();

}

5.4         产品(Product)

package org.pattern.builder;

 

public class Product {

 

}

 

6          在什么情况下使用建造模式

6.1         需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是一个对象,也可以仅仅是一个对象(产品对象)的一个组成部分。

6.2         需要生成的产品对象的属性相互依赖。

6.3         对象的创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到。

7          与抽象工厂模式区别

抽象工厂模式中,每次工厂对象被调用都返回一个完整的产品对象,而客户端有可能决定把这些产品组成一个更大更复杂的产品,也有可能不会。构造类是一点点的建造出一个复杂的产品,这个产品的组装过程发生在构造者的内部。建造者模式的客户端拿到的是一个完整的最后产品。也就是说,建造者模式处于更加宏观的尺度上,而抽象工厂模式出在更加具体的尺度。

一个系统的客户端可以通过调用建造角色,间接地调用抽象工厂模式的工厂角色,工厂模式返回不同的产品族的零件,而建造者模式把它们组装起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值