(Builder)创建者模式
- 定义:
建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
- 适用性:
当流程算法可以固定几个步骤,步骤的算法步骤执行顺序固定,且制造的产品可以唯一确定,这时使用创建者模式。
- 模式思想:
对算法步骤进行封装(Director),对流程算法步骤有统一的接口Builder,算法具体的每个步骤变化时,可以通过实现算法步骤借口类进行扩展或适配(ConcreteBuilder1,ConcreteBuilder2…),Director不关心流程步骤,只负责流程算法执行顺序,从而达到了解耦,依赖倒置的思想。
- 模式结构图:
- 示例:
Builder:
1 /// <summary>
2 /// Description of ValidateCodeBuilderBase.
3 /// </summary>
4 public abstract class ValidateCodeBuilderBase
5 {
6 protected ValidateCodeInfo ValidateCodeInfo=new ValidateCodeInfo();
7
8 //生成随机数
9 public abstract void CreateRandom();
10
11 //绘制验证码图片
12 public abstract void CreateImageBmp();
13
14 //混淆验证码图片
15 public abstract void DisposeImageBmp();
16
17 // 存放到session中
18 public abstract void SetSession();
19
20 /// <summary>
21 /// 返回生成的验证码信息
22 /// </summary>
23 public abstract ValidateCodeInfo GetResult();
24 }
Director:
1 public class ValidateCodeDirector
2 {
3 private ValidateCodeBuilderBase builder=null;
4
5 public ValidateCodeDirector(ValidateCodeBuilderBase builder)
6 {
7 this.builder=builder;
8 }
9
10 public ValidateCodeInfo MakeValidateCode()
11 {
12 this.builder.CreateRandom();
13 this.builder.CreateImageBmp();
14 this.builder.DisposeImageBmp();
15 this.builder.SetSession();
16
17 return this.builder.GetResult();
18 }
19 }
Product:
1 public class ValidateCodeInfo
2 {
3 public Bitmap Bitmap{get;set;}
4
5 public string ValidateCode{get;set;}
6 }
ConcreteBuilder1:
1 public class ValidateCode_Style01:ValidateCodeBuilderBase
2 {
3 public override void CreateRandom()
4 {
5 //
6 }
7
8 public override void CreateImageBmp()
9 {
10 //
11 }
12
13 public override void DisposeImageBmp()
14 {
15 //
16 }
17
18 public override void SetSession()
19 {
20 //
21 }
22
23 public override ValidateCodeInfo GetResult()
24 {
25 return base.ValidateCodeInfo;
26 }
27 }
ConcreteBuilder2:
1 public class ValidateCode_Style02:ValidateCodeBuilderBase
2 {
3 public override void CreateRandom()
4 {
5 //
6 }
7
8 public override void CreateImageBmp()
9 {
10 //
11 }
12
13 public override void DisposeImageBmp()
14 {
15 //
16 }
17
18 public override void SetSession()
19 {
20 //
21 }
22
23 public override ValidateCodeInfo GetResult()
24 {
25 return base.ValidateCodeInfo;
26 }
27 }
- 各自职责
Builder: |
流程算法抽象类,负责定义流程算法具体每个步骤的函数; |
ConcreteBuilder: |
实现流程每个步骤的具体实现类,必须遵循流程算法抽象接口(实现Builder抽象类); |
Product: |
按照一定的顺序执行完流程算法各个步骤后,在流程算法抽象类中将会提供一个GetResult()函数返回制造的产品就为Product. |
Director: |
用来确定流程算法步骤,并返回制造的产品。 |
- 各自特点
Director特点:
- 结合Builder从而实现了解耦和依赖倒置;
- 对算法步骤进行封装;
- Director不关心流程步骤,只负责流程算法执行顺序,职责单一.
Builder特点:
1. 负责算法流程具体步骤的定义,具有总结能力,具有规范(模范)意义;
2. 不负责具体实现,从而结合Director达到解耦,依赖倒置。
- 调用:
这里我必须要附上,它的调用要注意,实例化的ConcreteBuilder时Client来负责的,这也正体现了Director解耦的实现,Director只接收一个抽象的Builder对象。
static void Main(string[] args)
{
// 实例化builder
ValidateCodeBuilderBase builder=new ValidateCode_Style01();
// 实例化director
ValidateCodeDirector director=new ValidateCodeDirector(builder);
// 生成验证码信息
ValidateCodeInfo validateInfo=director.MakeValidateCode();
}
- 比较(抽象工厂vs创建者模式):
看起来很抽象工厂优点相似,不错,他们有相似指出就是都有类的实例化,但不同的的是,他们负责的重点不一样:
抽象工厂负责重点 :注重类的创建,类的实例化是交给了工厂方法实例化, 它负责了类的实例化------子类的创建封装在工厂方法中;
创建者模式负责重点:注重流程算法的操作步骤(Director),而Builder的子类(ConcreteBuilder)的实例化时由Client来实现的。
从这些方面来说我们可以说他们共同拥有创建型模式相似外,还有很大的区别,而且抽象工厂,创建的产品是多个系列的产品,而创建者确实一个确定的产品对象。
参考文档:《 http://www.codeproject.com/Articles/28309/Design-pattern-FAQ-Part-1-Training》
希望牛人们,给点指点和建议!
(Builder)创建者模式的更多相关文章
- Builder创建者模式
http://www.codeproject.com/Articles/42415/Builder-Design-Pattern In Elizabeth's day care center, the ...
- [设计模式] 3 创建者模式 builder
转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...
- C#设计模式之五创建者模式(Builder)【创建型】
一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬 ...
- 创建者模式Builder
创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...
- 设计模式学习总结(五)创建者模式(Builder)
创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成. 一.示例展示: 通过学习及总结,以下是我完成的创建者模式的示例: 1.创建产品类:Laptop public c ...
- 创建者模式-Builder
创建者模式使用多个简单的对象一步一步构建成一个复杂的对象.它提供了一种创建对象的最佳方式.一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的. 一.类图 创建者 ...
- OOAD(面向对象分析和设计)GRASP之创建者模式(Creator)又称生成器模式学习笔记
说OOAD是一门玄学,一点都不为过.又或许是因为我之前一直没有很好的建立面向对象的思想,更有可能是因为练得不够多...总之,一直没能很好理解,哪怕把一本叫做<UML和模式应用>的书翻来覆去 ...
- 【java设计模式】之 建造者(Builder)模式
我们还是举上一节的例子:生产汽车.上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动.停止.鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺 ...
- 设计模式之——Builder建造模式
Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式. 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目. Builder抽象类,为建造模式的核心 ...
随机推荐
- PHP使用Xdebug进行远程调试
PHP使用Xdebug进行远程调试 翻译 by mylxsw posted on 2014/07/14 under 技术文章 > 编程语言 Xdebug提供了客户端与PHP脚本进行交互的接口,这 ...
- Yii源码阅读笔记(九)
Behvaior类,Behavior类是所有事件类的基类: namespace yii\base; /** * Behavior is the base class for all behavior ...
- html 符号大全
░ ▒ ▬ ♦ ◊ ◦ ♠ ♣ ▣ ۰•● ❤ ●•۰► ◄ ▧ ▨ ♨ ◐ ◑ ↔ ↕ ▪ ▫ ☼ ♦ ♧♡♂♀♠♣♥❤☜☞☎☏⊙◎ ☺☻☼▧▨♨◐◑↔↕▪ ▒ ◊◦▣▤▥ ▦▩◘ ◈◇♬♪♩♭♪の ...
- nginx调优
Nginx is an open-source Web Server. It is a high-performance HTTP server that uses very low server r ...
- java endorsed
endorsed目录,充许你将一些特殊的类库放到其中以供项目使用. 官方说明: Specifying the -Djava.endorsed.dirs=lib/endorsed system p ...
- 前端 JSer 装逼手册
阅读 8143收藏 2352016-7-18 SegmentFault 分享:吉祥物 @ SegmentFault 在装逼成本越来越高的 JS 圈,是时候充值一下了 -- 题记. 作者:kenberk ...
- zabbix-agent passive
http://www.cnblogs.com/mysql-dba/p/5010902.html http://blog.chinaunix.net/uid-29155617-id-4668602.ht ...
- 树莓派如何便捷的使用pi4j
问题的由来 pi4j用起来很方便,但是感觉pi4j库的命名太杂乱,啰嗦了,很容易弄混,而且好像没听说官方有自己的编译器.如果没有智能点的编辑器的话,写起来真要命,但是树莓派运行Eclipse不太现实, ...
- JS中数组对象去重
JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉 ...
- readonly=“readonly”与readonly=“true”
<input id="u" readonly /> <input id="u" readonly="readonly" / ...