从简单的对象一步一步构造一个复杂的对象,这就叫做构建模式。它是属于创建设计模式之一,也挺常用的。

适用场合和好处:

  1. 仅仅通过指定它的类型和内容来生成一个复杂的对象,而这个构造的对象隐藏在它的构建细节。
  2. 想分离构建一个复杂对象的过程。
  3. 为析构和呈现而隔离代码
  4. 给予你更好的控制析构(construction)过程。
对于组合(Composite), 它经常用来构建一个复杂的对象,而构建模式则强调从简单的对象构建一个复杂的对象。
分析一个实例,如下:
假如有一个构建房屋的程序,有几个造房子的步骤,完成这些步骤就好。
House.java类
public class House {private String type = null;private List features = new ArrayList();public House() {}public House(String type) {this.type = type;}public void setType(String type) {this.type = type;}public String getType() {return type;}public void setProgress(String s) {features.add(s);}public String toString() {StringBuffer ff = new StringBuffer();String t = type.substring(6);ff.append(t + "\n ");int size =  features.size();for (int i = 0; i < size; i++) {ff.append(features.get(i) + "\n ");}return ff.toString();}
}
它的子类Skyscraper.java
public class Skyscraper extends HouseBuilder {Skyscraper(String type){System.out.println("--Building the house "+ type);house.setType(this.getClass() +" :"+ type);}@Overridepublic void buildFoundation() {//doEngineering()//doExcavating()//doPlumbingHeatingElectricity()//doSewerWaterHookUp()//doFoundationInspection()house.setProgress("foundation is done");}@Overridepublic void buildFrame() {//doHeatingPlumbingRoof()//doElectricityRoute()//doDoorsWindows()//doFrameInspection()house.setProgress("frame is done");}@Overridepublic void buildExterior() {//doOverheadDoors()//doBrickWorks()//doSidingsoffitsGutters()//doDrivewayGarageFloor()//doDeckRail()//doLandScaping()house.setProgress("Exterior is waiting to start");}@Overridepublic void buildInterior() {//doBuiltinVacuum()//doInsulation()//doDryWall()//doPainting()//doLinoleum()//doCabinet()//doTileWork()//doLightFixtureBlinds()//doCleaning()//doInteriorInspection()house.setProgress("Interior is not started yet");}
}

定义一个房子构造抽象类HouseBuilder.java.

abstract class HouseBuilder {protected House house = new House();//show the building infoprotected String showProgress() {return house.toString();}abstract public void buildFoundation();abstract public void buildFrame();abstract public void buildExterior();abstract public void buildInterior();
}

构造启动类Workshop.java.

public class Workshop{public void construct(HouseBuilder builder){builder.buildFoundation();builder.buildFrame();builder.buildExterior();builder.buildExterior();}
}

测试这个构造模式,代码如下:

public class Builder {public static void main(String []args){System.out.println("---- Builder Pattern ---------");//initialize two house builder objectsHouseBuilder skyscraperOne = new Skyscraper("************Telnet");HouseBuilder skyscraperTwo = new Skyscraper("****************DongDu");//build the workspace for the projectWorkshop workshop = new Workshop();workshop.construct(skyscraperOne);workshop.construct(skyscraperTwo);//show the building informationSystem.out.println("---check the building-----");System.out.println(skyscraperOne.showProgress());System.out.println(skyscraperTwo.showProgress());}
}

结果如下:

---- Builder Pattern ---------
--Building the house ************Telnet
--Building the house ****************DongDu
---check the building-----
org.pattern.rationaljava.creationalpattern.Skyscraper :************Telnetfoundation is doneframe is doneExterior is waiting to startExterior is waiting to startorg.pattern.rationaljava.creationalpattern.Skyscraper :****************DongDufoundation is doneframe is doneExterior is waiting to startExterior is waiting to start

构造模式(Builder Pattern)相关推荐

  1. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  2. 大厦设计师 -- 建造者模式 (Builder Pattern) 介绍 使用案例场景分析 优缺点 及代码演示

    一句话概括: 使用多个简单对象一步一步构建成复杂对象,将复杂对象的构建与表示相分离. 补充介绍: 建造者模式(Builder Pattern)中有一个 Builder 类,这个类会一步一步构造最终的对 ...

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

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

  4. Net设计模式实例之建造者模式(Builder Pattern)(2)

    四.案例分析(Example) 1.场景 假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O /> Jane和 Joe两个客户需要从建 ...

  5. C#设计模式——生成器模式(Builder Pattern)

    一.概述 在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封 ...

  6. 设计模式笔记——生成器模式(Builder Pattern)

    一.概述 在软件系统中,把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了类的逻辑.它把一个复杂对象的构造过程从对象的表示中分离出来了,其直接效果是将一个复杂的对象简化为一个比较简单的目标对象. ...

  7. UE4 C++设计模式:建造者模式(Builder Pattern)

    目录 描述 套路 使用场景 优缺点 UE4实践 具体复杂产品-门派角色 抽象建造者-角色构造器 具体建造者-纯阳角色构造器 具体建造者-七秀角色构造器 创建指挥者(Director)-角色创建指挥器 ...

  8. java设计模式建造_Java设计模式——建造模式(Builder Pattern)

    Builder模式常用例子 今天就简单粗暴的介绍一下Builder模式概念和使用. Dialog的创建 AlertDialog dialog = new AlertDialog.Builder(thi ...

  9. 二十三种设计模式[3] - 生成器模式(Builder Pattern)

    前言 生成器,又名建造者模式,属于创建型模式.在<设计模式 - 可复用的面向对象软件>一书中对它的描述为" 将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表 ...

最新文章

  1. django 框架中应用 redis 集群
  2. [转]【Git】rebase 用法小结
  3. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-
  4. 监控最佳实践--redis及业务接口
  5. 《OD大数据实战》MongoDB环境搭建
  6. hive臨時udf與永久udf詳細操作流程
  7. 我的学生时代之一[小学时代]
  8. sklearn 3. 实例:随机森林在乳腺癌数据上的调参
  9. linux git 显示 分支,Linux 终端显示 Git 当前所在分支
  10. Jackson(ObjectMapper)的简单使用(可转xml)
  11. CICD详解(一)——概念和原理
  12. sqlserver shiwu
  13. android程序连接网络出现android.os.NetworkOnMainThreadEx
  14. 记一个单双引号的特别用法
  15. CAD转JPG时设置转换质量
  16. python判断手机号码是否正确_基于python的-使用正则表达式验证手机号
  17. windows无法格式化u盘_U盘修复无法格式化的解决方法
  18. (一)初识Echarts之柱状图
  19. 解决Unresolved external ‘AlphaBlend‘ referenced的办法
  20. elasticsearch 版本区别

热门文章

  1. 华为机试HJ46:截取字符串
  2. OpenCV-数组加权和cv::addWeighted
  3. python调用qt动态库_QT开发——动态库(.so文件)的生成与调用
  4. 2019服务器部署文件管理,在 Windows Server 2019 中部署文件共享见证 | Microsoft Docs
  5. python串口数据分包_python TCP Socket的粘包和分包的处理详解
  6. 剑指offer面试题[22]-栈的压入、弹出序列
  7. 软件测试:职场上那些你不得不学会的事儿
  8. c语言1l是多少,1千克等于多少升(一千克等于一升啊)
  9. 调用 oauth2_奥利给,再也不怕面试官问我OAuth 2.0授权了
  10. java中整形_java中怎样实现60多位整形数字的运算