原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11406502.html

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

2. 结构图

Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。
ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:产品,表示被生成器构建的复杂对象,包含多个部件。

3. 本质
生成器模式的本质:分离整体构建算法和部件构造。
构建一个复杂的对象,本来就有构建的过程,以及构建过程中具体的实现。生成器模式就是用来分离这两个部分,从而使得程序结构更松散、扩展更容易、复用性更好,同时也会使得代码更清晰,意图更明确。

虽然在生成器模式的整体构建算法中,会一步一步引导Builder来构建对象,但这并不是说生成器主要就是用来实现分步骤构建对象的。生成器模式的中心还是在于分离整体构建算法和部件构造,而分步骤构建对象不过是整体构建算法的一个简单表现,或者说是一个附带产物。

4. Code Demo

Product.java

 package org.fool.dp.builder;

 public interface Product {
}

Builder.java

 package org.fool.dp.builder;

 public interface Builder {
void buildPart();
}

ConcreteBuilder.java

 package org.fool.dp.builder;

 public class ConcreteBuilder implements Builder {
private Product product; public Product getResult() {
return product;
} @Override
public void buildPart() {
System.out.println("build part...");
}
}

Director.java

 package org.fool.dp.builder;

 public class Director {
private Builder builder; public Director(Builder builder) {
this.builder = builder;
} public void construct() {
builder.buildPart();
}
}

Client.java

 package org.fool.dp.builder;

 public class Client {
public static void main(String[] args) {
ConcreteBuilder builder = new ConcreteBuilder(); Director director = new Director(builder); director.construct(); Product result = builder.getResult();
System.out.println(result);
}
}

最新文章

  1. SpringMVC学习记录4
  2. 局部(或全局)设置<a>标签的target属性
  3. continue 语句
  4. Ecshop的购物流程代码分析详细说明
  5. LoadRunner 文本检查点使用
  6. 【移动开发】安卓Lab2(02)
  7. .NET清楚Cookies
  8. aliyun 购买的linux安装tomcat
  9. Java中集合List,Map和Set的区别
  10. js的构造函数共用事例
  11. [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar
  12. #7 Python顺序、条件、循环语句
  13. struts2马士兵笔记
  14. .NET:System.Security.Cryptography.CryptographicException 的解决办法
  15. Tomcat默认界面可导致版本信息泄露+管理后台爆破
  16. js replace 用法
  17. Python的ipython的安装
  18. 单选 name的值相同时候 就会产生互斥现象
  19. Bugku 速度要快
  20. regular expression, grep (python, linux)

热门文章

  1. "sorted()"中的"Key Functions"
  2. springmvc对象作为 目标方法的参数。
  3. win 10配置安装iis
  4. JS谷歌浏览器断点调试
  5. Python基础教程(017)--执行Python的方式解释器运行及其他几种解释器简介
  6. delphi按字节长度分割字符串函数(转)
  7. NOIP 历年试题大致考点总结
  8. sts bug SpringJUnit4ClassRunner
  9. jenkins插件set build description使用规则
  10. 在windows下用脚手架搭建vue环境