设计模式--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.相关模式 (此模式与其他模式之间的关系)

【java设计模式】之 建造者(Builder)模式

我们还是举上一节的例子:生产汽车。上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动、停止、鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺...
  • eson_15
  • eson_15
  • 2016年05月06日 08:59
  • 5038

设计模式之—建造者模式(Builder)-Java实现

Builder模式,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部 表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模...
  • fuhao715
  • fuhao715
  • 2012年01月12日 13:58
  • 3462

设计模式学习之Builder模式

建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道...
  • hjxgood
  • hjxgood
  • 2017年04月21日 15:09
  • 507

Android开发中无处不在的设计模式——Builder模式

上一篇文章介绍了单例模式,这一篇继续介绍一个常见的模式——Builder模式。那么什么是Builder模式呢。你通过搜索,会发现大部分晚上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的...
  • sbsujjbcy
  • sbsujjbcy
  • 2015年10月18日 10:16
  • 5087

设计模式之四 --- 建造(Builder)模式

【1】基本概念            建造(Builder)模式是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象...
  • cjjky
  • cjjky
  • 2012年03月07日 01:01
  • 16983

PHP设计模式之Builder模式

Builder模式让我想到一个词“外包”,他把对象的创建外包给一个客户类,并且这个“外包类”要一步一步地创建对象,但是他又不返回本身类的对象。当然,这只是个比方,不是很准确,其实Builder模式要解...
  • hcb0825
  • hcb0825
  • 2011年04月15日 17:05
  • 874

Android设计模式之建造者模式(builder pattern)

builder设计模式我们很常见,比如我们使用AlertDialog的时候就使用的builder设计模式,著名的Universal-Image-Loader的初始化配置也是使用的builder设计模式...
  • nugongahou110
  • nugongahou110
  • 2015年12月25日 10:08
  • 2944

builder设计模式的使用以及优缺点

嗯,大家是否在开发过程中,经常遇到一个类拥有许多的属性呢。为了使这个类的使用便捷,我们通常情况下会给这个类多个构造器以及一个默认的无参数构造器。 但是当参数的个数达到四个或者更多的时候,你是否会经常...
  • u010469003
  • u010469003
  • 2014年04月03日 15:16
  • 1823

浅谈JAVA设计模式之——建造者模式(Builder)

一、概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被...
  • l1028386804
  • l1028386804
  • 2015年05月02日 21:22
  • 9784

android 使用Builder设计模式,设计ToolBar

使用Builder设计模式设计ToolBar Builder设计模式解析 最典型的代码示例 NotificationCompatBuilder AlertDialogBuilder Builder设计...
  • a1274624994
  • a1274624994
  • 2016年08月12日 01:58
  • 1100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式--Builder
举报原因:
原因补充:

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