博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HeadFirst 设计模式学习笔记】16 建筑者(Builder)模式拾零
阅读量:5326 次
发布时间:2019-06-14

本文共 1116 字,大约阅读时间需要 3 分钟。

作者:

出处:

1.概述

这个模式在Head First中没有介绍,大概是因为这个模式和工厂模式有点像。其目的主要是通过创建简单的对象构建一个复杂的对象。

2.举例

举一个例子:创建汽车的相关指标说明。

首先我们创建一个汽车的类:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

在上边的这个例子中,关于一个汽车的指标说明有三项:Power Steering、Power Window和Price。

然后我们创建一个创建汽车的类CarBuilder :

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

现在我们创建两个具体汽车类型的创建者:Alto_LX 和 Alto_LXI

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

最后我们再写一个创建说明并生产汽车的类,这个类组合了具体生产汽车的类,所以该类的一个作用就是生产一部汽车(因为组合而得到的能力),另一个作用是为这个汽车创建相关指标说明(这也是因为组合得到的能力,同时也是进行了封装后提供的接口):

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

现在我们就可以造两辆带有指标说明的车了:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

我们可以看到,首先我们实例化了一个创建说明的类,并且实例化了两个生产汽车的类。随后利用创建汽车能力的创建说明类来完成说明和汽车的构造。

抽象一下,UML图为:

Builder_pattern

本例中的Specification就是该图中Director。

3.与工厂方法(或抽象工厂方法)比较

该方法强调利用封装一步步完成一个复杂对象的构建,比如本例中的Specifications就是通过创建汽车、创建三项说明来完成汽车的最终构建的。而抽象工厂方法强调构建一系列产品对象,不管其复杂与否。另外,工厂方法还会根据传入的参数进行对象构建,这个建筑者模式中并没有。

Effective Java, 2nd Edition中提到:The builder pattern is a good choice when designing classes whose constructors or static factories would have more than a handful of parameters.

我们经常见过这样设计的类:

 
 
 
 
 
 

你可以做如下改进:

 
 
 
 
 
 

这样做也有问题:通过若干步创建的pizza可能会导致对象创建的不完整,并且对于线程安全还需要多多考量。

此时我们可以使用构建者模式(此处使用嵌套类,其实和组合是一个效果):

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

现在我们创建一个Pizza就是如下的方式:

 
 

这个例子可以与工厂模式里面的例子对比一下,就知道这两个模式的区别了。

Java中的 , StringBuffer, StringBuilder 都是这个模式的例子。

在线视频:

作者:

出处:

转载于:https://www.cnblogs.com/gnuhpc/archive/2012/12/21/2827640.html

你可能感兴趣的文章
python模块
查看>>
P1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火
查看>>
ssh连接报错
查看>>
VB与C#的区别(转载)
查看>>
Android--判断是否连接成功了指定wifi
查看>>
2018/6/19~2018/6/22 周记
查看>>
B. 存在的隐患
查看>>
Luogu P3172 [CQOI2015]选数
查看>>
spring 之 BeanFactory
查看>>
wordpress迁移服务器指南
查看>>
快速排序法
查看>>
C/C++中的预编译指令
查看>>
C# 标签的添加和删除(选择标签加样式)
查看>>
SpringMvc 大概流程分析
查看>>
JMeter记录篇5——JMeter体系结构
查看>>
读写(I/O)辩论
查看>>
Jmeter (一) 安装
查看>>
grep文本搜索工具详解
查看>>
2016031801 - 给移动硬盘分区
查看>>
Android Toast小解
查看>>