【C++ Design Pattern Creational】Buidler(建造者模式)

来源:互联网 发布:windows7系统优化教程 编辑:程序博客网 时间:2024/05/16 06:53

在开始这个模式阐述之前,我找到网上觉得不错的一个Builder设计模式点评,欢迎先在完成这篇阅读后对这个点评研究。

http://www.cnblogs.com/happyhippy/archive/2010/09/01/1814287.html

-----------------------------------

(以下内容部分来自《设计模式 可复用对象软件的基础》)

1.目的

将一个复杂对象聚合体的构建和它的表示分离,使得同样的构建过程可以创建不同表示

2.适用性

①当创建复杂对象的算法独立于对象组成部分以及装备方式

②当构造过程必须被构造的对象有不同的表示

------------------------------------------------------------------------------------------

这里如何理解构建和表示这两个词呢,根据网上一些评论和个人的一些观点,我觉得可以这样理解:

①对象体的构建就是创建对象体(记住是一个聚会体!)

②对象体的表示就是相同的对象构成不同的集合(等于说有a,b,c3种类型对象,可以创建出6种不同的组合,即6种不同的表示)

那如何达到这种同样的对象体的创建算法来创建不同的对象体组合,这也就是Builder的核心。

所以在阅读类模型图时的重点在于构建与表示,即创建方法与不同组合。

------------------------------------------------------------------------------------------

3.类模型图:

Builder1

在图中,我们可以观察到红字部分的内容。

Director::Construct()//这个就是构建的算法

{

//for all objects in structure,在结构中的所有对象

builder->BuidlerPart();

}

而通过这个构建,由于builder的不同类型的装载,就会产生不同的组合,即不同的表示。这个就是Builder的核心思想。

而实际上检索产品(提取实例)的工作依然交给Builder,director只是负责指导Builder的装载。

所以对象聚合体是保存在builder里面,当然builder也是一个对象,只是这个对象是一个装载其他所需的对象集合体的容器。

而不同的builder可以创建的不同的聚合体,创建的算法就放在Director里面,因此,同一个builder也可以生产不同的聚合体(当然聚合体里面的对象种类是相同的,只是组合方式不一样)。

所以,其模型运行的流程图:



4.注意问题

①当你需要改变唱片的内部表示时,仅仅是重新制作新的生成器。这样也就保证了开闭原则。

②判断是否使用这个模式的核心问题就是是否做到构建与表示的分离,即构造代码与表示代码的分离。

③它与其他创建型模式不一样的地方在于,如Abstract Factory以及Factory Method,这两个模式是直接生产实例,只是创建过程交给代理工厂。而Builder却是有Director(导向器)负责一步一步进行配置并创建。

④和其他创建型对象有一个相同的地方:都将创建的过程进行封装了。

(实例以后补充!)

//---------------------------------------------------

builder封装了每个组件的创建,director封装了产品的创建,而产品需要组件的组合。

所以不同类型的director(即不同的组件组合过程)调用同一个builder即可产生不同类型的产品(即不同的组件组合类型),而不同的builder意味着其内部包含不同的组件类型。

原创粉丝点击