设计模式之Builder(建造者)(转)
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(建造者)(转)相关推荐
- 【C++设计模式】Builder 建造者模式详解
文章目录 建造者模式概述 建造者模式结构与实现 模式结构 模式实现 建造者模式的应用实例:模拟游戏角色的创建 建造者模式的适用场景 建造者模式的优缺点 建造者模式概述 建造者模式是较为复杂的创建型模式 ...
- Builder (建造者) — 【面向对象设计模式学习】
Builder (建造者) - [面向对象设计模式学习] By CityWalker 2010年3月19日 Intent Separate the construction of a complex ...
- 设计模式学习笔记——建造者(Builder)模式
设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...
- Objective-C设计模式——生成器Builder(对象创建)
生成器 生成器,也成为建造者模式,同样是创建对象时的设计模式.该模式下有一个Director(指挥者),客户端知道该类引用用来创建产品.还有一个Builder(建造者),建造者知道具体创建对象的细节. ...
- Android设计模式之——Builder模式
一.介绍 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程.该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程 ...
- 设计模式之路 | 建造者模式
模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...
- 「设计模式(六) - Builder模式」
「设计模式(六) - Builder模式」 一.可定制化的 电脑的组装在生活中并不陌生,大家都有电脑,当然需求不一样配置也不一样.以Macbook Pro为例,像UI设计对图像模块GPU要求比较高,跑 ...
- 重学Java设计模式-创建者模式-建造者模式
重学Java设计模式-创建者模式-建造者模式 内容摘自:重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」 | bugstack 虫洞栈 建造者模式介绍 图片来自:https:/ ...
- Java 设计模式之Builder模式
设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...
- 设计模式系列之建造者模式构建实体类
设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...
最新文章
- TCP和UDP 粘包 消息保护边界
- 我被编程语言PUA了!用互联网黑话写代码,每天都在“赋能”变量
- io_service work 的作用
- (三) Angular2项目框架搭建心得
- 深度学习的batch_size
- [考试]20151019图论
- delphi中combobox键值对
- 重启IIS和SqlServer的命令行
- AR科技贯穿里约奥运始终 腾讯QQ营销顺风车值了
- 深入理解jvm运行时区域
- C#中值类型和引用类型的区别
- 新翔绩效考核系统 v2022
- U盘_PE启动+U存储+kali三合一启动盘制作教程
- 学习PS基本工具与感悟
- Windows操作系统注册表registry
- android 自定义locale,Android Locale填坑
- 港中文、佐治亚理工招收AI博士生
- 5g理论速度_5G的速度到底能有多快?
- 所需即所获:IDE = _plugins_ + vim
- Docker网络、容器编排
热门文章
- Photo Pos Pro 3中文版
- 及上一篇linux安装mysql的说明
- panda 函数-处理空值
- (一)java多线程之Thread
- 同感,C#对JSON序列化和反序列化有点蹩脚
- 完美解决 向UILable 文字最后插入N张图片,支持向限制行数的UILable 最后一行插入,多余文字显示......
- windows API(一)
- 四说大数据时代“神话”:从大数据到深数据
- matplotlib嵌入到pyqt中
- Websocket总结