设计模式--Builder

转载 2016年05月31日 14:58:19

1. 名称 (与开发人员共享的词汇)

    创建者模式(Builder)

2.分类 (模式可以 归为的类目)

    创建性模式

3.意图 (简短的描述该模式的作用)

    允许用户在不知道对象内部结构的情况下,可以惊喜的控制对象的构造流程,将复杂对象的构建过程和它的部件解耦,使构建过程和部件的表示隔离开

4.动机 (给出问题以及解决问题的具体场景)

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

5.适用性 (描述模式可以被应用在什么场合)

    1. 相同的方法,不同的执行顺序,产生不同的事件结果时

    2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果不同

    3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用

    4. 初始化一个对象时特别复杂,参数繁多并且很多参数有默认值时

6.结构 (提供此模式的类结构图,显示类之间的关系)

   

7.参与者 (描述此设计中涉及的类和对象在模式中的责任和角色)

     Product:  产品的抽象类

     Builder:   抽象Builder类,规范产品的组建,一般由子类实现具体的组建过程

    ConcreteBuilder:  具体的Builder类,实现具体的组建过程

    Director:    统一组装过程

8.协作 (参与者如何在模式中合作)

 Computer类定义了产品需要的部件接口

 Macbook类提供了产品的部件

 Builder类提供产品组装接口

 MacbookBuilder类实现了产品组装的接口

 Director类规定了组装步骤

 通过以上的封装,我们创建一个对象时并不需要知道对象的组成,只要通过Director的construct方法就可以构造出一个想要的对象。

9.范例代码 (提供实现模式的代码片段)

public abstract class Builder {
    public abstract void buildBoard(String board);
    public abstract void buildDisplay(String display);
    public abstract void buildOs();
    public abstract Computer create();
}

public class MacbookBuilder extends Builder {
    private Computer mComputer = new Macbook();
    public void buildBoard(String board) {
        mComputer.setBoard(board);
    }
    public void buildDisplay(String display) {
        mComputer.setDisplay(display);
    }
    public void buildOs() {
        mComputer.setOs();
    }
    public Computer create() {
        return mComputer;
    }
}

public abstract class Computer {
    private String mBoard;
    private String mDisplay;
    protected String mOs;
    protected Computer() {}
    public void setBoard(String board) {
        mBoard = board;
    }
    public void setDisplay(String display) {
        mDisplay = display;
    }
    public abstract void setOs();
}

public class Macbook extends Computer {
    protected Macbook() {}
    public void setOs() {
        mOs = "Mac Os";
    }
}

public class Director {
    Builder mBuilder = null;
    public Director(Builder builder) {
        mBuilder = builder;
    }

    public void construct(String board, String display) {
        mBuilder.buildBoard(board);
        mBuilder.buildDisplay(display);
        mBuilder.buildOs();
    }
}

10.实现 (在实现该模式时使用的技巧以及需要注意的问题)

 在相关开发中,Director角色经常被省略,而直接使用一个Builder来进行对象的组装,这个builder通常为链式调用,关键点是每个方法都返回this,可以实现

这种形式不仅去除了Director角色,整个结构也更加简单,也能对Product对象的组装过程有更精细的控制。

11.相关模式 (此模式与其他模式之间的关系)

相关文章推荐

Builder设计模式.txt

  • 2009年11月03日 10:00
  • 3KB
  • 下载

23种设计模式的java实现-Builder

  • 2012年09月18日 19:26
  • 7KB
  • 下载

读Android Builder设计模式后实战

Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder 模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时. 多个部件或零件,都可以装...

java设计模式之Builder&Decorator

  • 2014年12月01日 21:59
  • 35KB
  • 下载

builder设计模式源码

  • 2009年10月15日 18:30
  • 6KB
  • 下载

java中Builder设计模式 原理和好处

Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代...

晨会分享Builder设计模式

  • 2016年08月02日 00:31
  • 297KB
  • 下载

Java:设计模式之Builder

  • annkie
  • annkie
  • 2013年01月15日 10:25
  • 530

设计模式读书笔记:Builder(建造者)

意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。...

我也设计模式——4.Builder

http://www.cnblogs.com/Jax/archive/2007/04/10/707391.html 但凡是模式,总要有一个UML才能说清楚。一般而言,我只记UML图,有些模式有自己的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式--Builder
举报原因:
原因补充:

(最多只允许输入30个字)