深入浅出设计模式 ------ Builder(生成器模式)
一. 定义 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。
二. 结构
三. 参与者
Builder : 为创建一个Product对象的各个部件指定抽象接口。
ConcreteBuilder : 实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口。
Director : 构造一个使用(聚合:has-a的关系)Builder接口的对象。如下文代码ChefDirector类。
Product : 表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类, 包括将这些部件装配成最终产品的接口。
四. 时序图
从图中可以看出来Builder模式一个特点就是将内容集中生成, 然后输出。 常见例子就是StringBuilder的append方法, 一直append, 然后最终生成一个String。
五. 代码实现:
厨师作为水果沙拉的制作指挥者, 下令做沙拉, 具体细节不管。
package com.wenniuwuren.builder;
/** * 厨师指挥者类 * @author wenniuwuren * */
public class ChefDirector { private FruitSaladBuilder fruitSaladBuilder; // 持有当前所需要的构建器对象 public ChefDirector (FruitSaladBuilder fruitSaladBuilder) { this.fruitSaladBuilder = fruitSaladBuilder; } // 制造水果沙拉public void constructFruitSalad() { fruitSaladBuilder.buildSalad();fruitSaladBuilder.buildApple();fruitSaladBuilder.buildWaterMelon();}
}
水果沙拉制作接口:规定制作沙拉方法, 具体实现交给实现类ConcreteFruitSaladBuilder
package com.wenniuwuren.builder;
/** * 制作水果沙拉接口* @author wenniuwuren * */
public interface FruitSaladBuilder { // 添入沙拉酱public void buildSalad(); // 添入西瓜public void buildWaterMelon(); // 加入苹果public void buildApple(); // 便于Client得到最后的Resultpublic FruitSaladProduct getFruitSaladProduct(); }
水果沙拉具体制作:
package com.wenniuwuren.builder;
/** * 实际制作沙拉 * @author wenniuwuren * */
public class ConcreteFruitSaladBuilder implements FruitSaladBuilder {FruitSaladProduct fruitSaladProduct = new FruitSaladProduct();// 添入沙拉酱public void buildSalad() {fruitSaladProduct.setSalad("沙拉酱");}// 添入西瓜public void buildWaterMelon() {fruitSaladProduct.setWatermelon("西瓜");}// 加入苹果public void buildApple() {fruitSaladProduct.setApple("苹果");} // 便于Client得到最后的Result@Overridepublic FruitSaladProduct getFruitSaladProduct() {return fruitSaladProduct;}}
水果沙拉产品: 保存着制作水果沙拉的水果种类
package com.wenniuwuren.builder;
/** * FruitSalad产品 * @author wenniuwuren * */
public class FruitSaladProduct { private String apple; private String watermelon; private String salad;public String getApple() {return apple;}public void setApple(String apple) {this.apple = apple;}public String getWatermelon() {return watermelon;}public void setWatermelon(String watermelon) {this.watermelon = watermelon;}public String getSalad() {return salad;}public void setSalad(String salad) {this.salad = salad;}
}
测试类:
package com.wenniuwuren.builder;
/*** 测试类* @author wenniuwuren**/
public class Client {public static void main(String[] args) {FruitSaladBuilder appleSaladBuilder = new ConcreteFruitSaladBuilder();// Builder当成参数传入接受指挥ChefDirector chefDirector = new ChefDirector(appleSaladBuilder);// 内部连续添加材料chefDirector.constructFruitSalad();// 一次性输出FruitSaladProduct fruitSaladProduct = appleSaladBuilder.getFruitSaladProduct();System.out.println("沙拉的配料是:" + fruitSaladProduct.getSalad() + ", "+ fruitSaladProduct.getWatermelon() + ", "+ fruitSaladProduct.getApple());}
}
输出结果:
沙拉的配料是:沙拉酱, 西瓜, 苹果
六. 总结
正如上述代码实现, Builder设计模式将具体的实现隐藏在Builder中, 指挥者Director无需关心细节。 这个和Abstract Factory很相似, 但是区别在于Builder在于一步步构造对象, 最后一次性输出, 而Abstract Factory注重于多个系列的产品的生产, 并且它是立即返回结果的。
参考书籍
《设计模式:可复用面向对象软件的基础》
深入浅出设计模式 ------ Builder(生成器模式)相关推荐
- 设计模式--Builder生成器模式
GOF<设计模式>中说道:将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示. 所谓"复杂对象",是指:此对象中还含有其它的子对象. ...
- [设计模式] —— Builder 生成器模式
文章目录 Builder 生成器模式 动机 定义 示例代码 结构图 总结 Builder 生成器模式 动机 面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构 ...
- 2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)
设计模式之生成器模式(对象创建型模式) 1.定义/概念 将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示. 2.生成模式角色 Builder: 生成器接口,定义创建一个Produ ...
- Builder生成器模式
这次来学习另一个创建型设计模式:Builder生成器模式. GOF对Builder模式的定义 (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. ...
- C#设计模式 之 生成器模式
C#设计模式 之 生成器模式 一,意图 二,动机 三,结构 四,优缺点 五,应用场景 六,代码实现 别名:建造者模式.Builder 一,意图 将一个复杂的对象的构建与其表示相分离,使得同样的构建 ...
- C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑...
1.理论定义 生成器模式 又叫:建造者模式,它 可以 把一个 复杂的对象,分步骤创建. 2.应用举例 需求描述:话说发工资了,打算去岗顶百脑汇 给老婆配置一台电脑. OK,坐着BRT,就出发了. ...
- 研磨设计模式 之 生成器模式(Builder)2 ——跟着cc学设计系列
8.2 解决方案 8.2.1 生成器模式来解决 用来解决上述问题的一个合理的解决方案就是生成器模式.那么什么是生成器模式呢? (1)生成器模式定义 (2)应用生成器模式来解决的思路 仔细分析上面的 ...
- Builder(生成器模式) 创建型
生成器模式 一.概述 二.结构 三.适用场景 四.优缺点 五.实例 一.概述 生成器是一种创建型设计模式,使你能够分步骤创建复杂对象.该模式允许你使用相同的创建 代码生成不同类型和形式的对象. 二.结 ...
- JAVA23种设计模式之生成器模式
生成器模式 生成器模式是一种对象的创建模式,可以将一个复杂产品的内部表象和产品的生产过程分隔开来,(构建与表示分离).使得同样的构建过程可以创建不同的表示. 简单的来说,就是讲一个复杂的对象拆分成一个 ...
最新文章
- c语言调用视频播放软件,C语言播放视频
- 什么工作,未来可以走创业路线?
- 计算机网络 陆魁军 ppt,计算机网络的应用基础概述.doc
- 数据结构-算法: 分配排序(基数分配排序法)
- 随机数生成算法-二谈
- 减小TabLayout高度而不影响每个tab展示的几种方法
- 从零开始学python项目_从零开始可以这样学python
- 浅谈C++ STL中的优先队列(priority_queue)
- 全新威马E.5将于4月15日上市
- TensorFlow实战minist数据集(CNN)
- 在线体验四大名著情景(地图、游戏)
- 汽车DTC故障码格式解析
- Adobe dreamweaver CS6小白入门教程
- RouterOS(ROS)设置动态域名(DDNS)
- 数据库报错create connection SQLException,............ errorCode 1129, state HY000
- Win7电脑定时关机
- 予你45条古诗词,一读就觉得岁月静好....
- Reached heap limit Allocation failed - JavaScript heap out of memory
- linux nfs acl 特定ip,Linux NFS配置
- 指纹识别登录Windows Server服务器远程桌面