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

Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.

为何使用?
是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程部件.

因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.

如何使用?
首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.

首先,需要一个接口,它定义如何创建复杂对象的各个部件:

public interface Builder { //创建部件A  比如创建汽车车轮void buildPartA(); //创建部件B 比如创建汽车方向盘void buildPartB(); //创建部件C 比如创建汽车发动机void buildPartC(); //返回最后组装成品结果 (返回最后装配好的汽车)//成品的组装过程不在这里进行,而是转移到下面的Director类中进行.//从而实现了解耦过程和部件
  Product getResult();
}

用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:

public class Director {private Builder builder; public Director( Builder builder ) { this.builder = builder; } // 将部件partA partB partC最后组成复杂对象//这里是将车轮 方向盘和发动机组装成汽车的过程public void construct() { builder.buildPartA();builder.buildPartB();builder.buildPartC(); }
}

Builder的具体实现ConcreteBuilder:
通过具体完成接口Builder来构建或装配产品的部件;
定义并明确它所要创建的是什么具体东西;
提供一个可以重新获取产品的接口:

public class ConcreteBuilder implements Builder { Part partA, partB, partC; public void buildPartA() {//这里是具体如何构建partA的代码
}; public void buildPartB() { //这里是具体如何构建partB的代码
  }; public void buildPartC() { //这里是具体如何构建partB的代码
  }; public Product getResult() { //返回最后组装成品结果
  };
}

复杂对象:产品Product:

public interface Product { }

复杂对象的部件:

public interface Part { }

我们看看如何调用Builder模式:

ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder ); director.construct();
Product product = builder.getResult();

Builder模式的应用
在Java实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.

"池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能.修改Builder模式中Director类使之能诊断"断肢"断在哪个部件上,再修复这个部件.

具体英文文章见:Recycle broken objects in resource pools

转自:http://www.jdon.com 板桥里人

转载于:https://www.cnblogs.com/alfredinchange/p/5339767.html

设计模式之Builder(建造者)(转)相关推荐

  1. 【C++设计模式】Builder 建造者模式详解

    文章目录 建造者模式概述 建造者模式结构与实现 模式结构 模式实现 建造者模式的应用实例:模拟游戏角色的创建 建造者模式的适用场景 建造者模式的优缺点 建造者模式概述 建造者模式是较为复杂的创建型模式 ...

  2. Builder (建造者) — 【面向对象设计模式学习】

    Builder (建造者) - [面向对象设计模式学习] By CityWalker 2010年3月19日 Intent Separate the construction of a complex ...

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

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

  4. Objective-C设计模式——生成器Builder(对象创建)

    生成器 生成器,也成为建造者模式,同样是创建对象时的设计模式.该模式下有一个Director(指挥者),客户端知道该类引用用来创建产品.还有一个Builder(建造者),建造者知道具体创建对象的细节. ...

  5. Android设计模式之——Builder模式

    一.介绍 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程.该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程 ...

  6. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  7. 「设计模式(六) - Builder模式」

    「设计模式(六) - Builder模式」 一.可定制化的 电脑的组装在生活中并不陌生,大家都有电脑,当然需求不一样配置也不一样.以Macbook Pro为例,像UI设计对图像模块GPU要求比较高,跑 ...

  8. 重学Java设计模式-创建者模式-建造者模式

    重学Java设计模式-创建者模式-建造者模式 内容摘自:重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」 | bugstack 虫洞栈 建造者模式介绍 图片来自:https:/ ...

  9. Java 设计模式之Builder模式

    设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...

  10. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

最新文章

  1. TCP和UDP 粘包 消息保护边界
  2. 我被编程语言PUA了!用互联网黑话写代码,每天都在“赋能”变量
  3. io_service work 的作用
  4. (三) Angular2项目框架搭建心得
  5. 深度学习的batch_size
  6. [考试]20151019图论
  7. delphi中combobox键值对
  8. 重启IIS和SqlServer的命令行
  9. AR科技贯穿里约奥运始终 腾讯QQ营销顺风车值了
  10. 深入理解jvm运行时区域
  11. C#中值类型和引用类型的区别
  12. 新翔绩效考核系统 v2022
  13. U盘_PE启动+U存储+kali三合一启动盘制作教程
  14. 学习PS基本工具与感悟
  15. Windows操作系统注册表registry
  16. android 自定义locale,Android Locale填坑
  17. 港中文、佐治亚理工招收AI博士生
  18. 5g理论速度_5G的速度到底能有多快?
  19. 所需即所获:IDE = _plugins_ + vim
  20. Docker网络、容器编排

热门文章

  1. Photo Pos Pro 3中文版
  2. 及上一篇linux安装mysql的说明
  3. panda 函数-处理空值
  4. (一)java多线程之Thread
  5. 同感,C#对JSON序列化和反序列化有点蹩脚
  6. 完美解决 向UILable 文字最后插入N张图片,支持向限制行数的UILable 最后一行插入,多余文字显示......
  7. windows API(一)
  8. 四说大数据时代“神话”:从大数据到深数据
  9. matplotlib嵌入到pyqt中
  10. Websocket总结