概括

名称

Builder

结构

动机

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

适用性

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

  • 当构造过程必须允许被构造的对象有不同的表示时。

解析

形象比喻:

BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞定,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖)

建造模式:将对象的内部表象和对象的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

1.Builder
      为创建一个Product对象的各个部件指定抽象接口。

2.ConcreteBuilder
      实现Builder的接口以构造和装配该产品的各个部件。
      定义并明确它所创建的表示。
      提供一个检索产品的接口。

3.Director
      构造一个使用Builder接口的对象。

4.Product
      表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
      包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

实例

涉及的文件有

IProductBuilder.java

- SoftwareBuilder.java

Product.java

ProductDirector.java

TestMain.java

Product 是一个产品类,是一个简单的java bean, 包含一些属性及对应的set ,get 方法。

IProductBuilder和SoftwareBuilder, 构造器的接口和实现类, 定义有一些方法实例化特定的 Product。

ProductDirector 使用Builder并调用相关方法返回构造的Product.

/**   * @author oscar999   * @date 2013-7-18* @version V1.0   */
package designptn.builder;public class Product {private String head;private String body;private String foot;/*** @return the head*/public String getHead() {return head;}/*** @param head*            the head to set*/public void setHead(String head) {this.head = head;}/*** @return the body*/public String getBody() {return body;}/*** @param body*            the body to set*/public void setBody(String body) {this.body = body;}/*** @return the foot*/public String getFoot() {return foot;}/*** @param foot*            the foot to set*/public void setFoot(String foot) {this.foot = foot;}}
/**   * @author oscar999   * @date 2013-7-18* @version V1.0   */
package designptn.builder;public interface IProductBuilder {void buildHead();void buildBody();void buildFoot();Product buildProduct();
}
/**
* @author oscar999
* @date 2013-7-18
* @version V1.0
*/
package designptn.builder;public class SoftwareBuilder implements IProductBuilder {Product product;public SoftwareBuilder(){product = new Product();}@Overridepublic void buildHead() {// TODO Auto-generated method stubproduct.setHead("Software Head");}@Overridepublic void buildBody() {// TODO Auto-generated method stubproduct.setBody("Software Body");}@Overridepublic void buildFoot() {// TODO Auto-generated method stubproduct.setFoot("Software Foot");}@Overridepublic Product buildProduct() {// TODO Auto-generated method stubreturn product;}}
/**   * @author oscar999   * @date 2013-7-18* @version V1.0   */
package designptn.builder;public class ProductDirector {public Product constructProduct(SoftwareBuilder pb) {pb.buildHead();pb.buildBody();pb.buildFoot();return pb.buildProduct();}
}
/**
* @author oscar999
* @date 2013-7-18
* @version V1.0
*/
package designptn.builder;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProductDirector pd = new ProductDirector();Product product = pd.constructProduct(new SoftwareBuilder());System.out.println(product.getHead());System.out.println(product.getBody());System.out.println(product.getFoot());}}

一言蔽之,就是不直接实例化需要的类,而是通过构造器构建。

[设计模式-创建型]建造者(Builder)相关推荐

  1. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  2. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  3. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  4. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

  5. 软考软件设计师---面向对象技术(设计模式--创建型--工厂、生成器、原型、单例)

    转载于自己博客文章: 软考软件设计师---面向对象技术(设计模式--创建型--工厂.生成器.原型.单例) - 松下之约一.创建型设计模式关注对象的创建,让一个类得到实例化过程由另一类的对象完成.分类: ...

  6. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  7. 设计模式-创建型模式-模板方法

    设计模式-创建型模式-模板方法 定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤. protected 对于本包及其子类可见. 类图 代码 代 ...

  8. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  9. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

最新文章

  1. 融合了距离矢量和链路状态两种路由选择协议的优点
  2. html相同数据合并单元格合并单元格,基于JQuery实现相同内容合并单元格的代码...
  3. 唯美好看的动态个人鹿鸣404单页HTML源码
  4. 批量重命名文件和批量修改文件扩展名
  5. micropython中文社区 socket通讯_基于micropython的TCP客户端编程
  6. edup网卡 linux,应用笔记--使用USB WiFi网卡
  7. C语言编程 犯二的程度,犯二的程度 - osc_jhl7rojx的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 微信小程序radio单选框
  9. 移动硬盘里的linux系统文件夹加密,在Deepin系统中加密移动存储设备的方法
  10. 阿里云推出“通达云OA”办公系统 基于钉钉的移动OA应用...
  11. 专访许雪松:深入理解嵌入式开发
  12. crontab 定时任务时间格式设置
  13. 计算机主板知识,电脑硬件及电脑配置知识大全-主板知识
  14. php 判断爬虫程序,php判断搜索引擎蜘蛛爬虫还是人为访问代码
  15. 不负热爱砥砺前行 ,谱写ULTRADX(奥创)时代新篇章
  16. Android app获取短信验证码,并自动填充
  17. 精力管理3—体能精力
  18. 中级经济师 |《经济基础知识》学习思维导图
  19. 牛客刷题记录之语法入门循环结构篇1.0
  20. Kali入侵Windows主机

热门文章

  1. ASP.Net Jquery 随机验证码 文本框判断
  2. Java:基于LinkedList实现栈和队列
  3. 常见错误Delegate already added to touch dispatcher.的解决方案
  4. android电源管理
  5. sql union和unmion all区别
  6. WordPress解决上传文件大小限制问题
  7. 个性化推荐从入门到精通(附推荐产品经理修炼秘籍)
  8. 摄像机成像公式、外参、内参(转载)
  9. ubuntu安装最新版blender方法
  10. 通俗易懂!视觉slam第十部分——贝叶斯估计