在开始这个模式阐述之前,我找到网上觉得不错的一个Builder设计模式点评,欢迎先在完成这篇阅读后对这个点评研究。
http://www.cnblogs.com/happyhippy/archive/2010/09/01/1814287.html
-----------------------------------
(以下内容部分来自《设计模式 可复用对象软件的基础》)
1.目的
将一个复杂对象聚合体的构建和它的表示分离,使得同样的构建过程可以创建不同表示。
2.适用性
①当创建复杂对象的算法独立于对象组成部分以及装备方式
②当构造过程必须被构造的对象有不同的表示时
------------------------------------------------------------------------------------------
这里如何理解构建和表示这两个词呢,根据网上一些评论和个人的一些观点,我觉得可以这样理解:
①对象体的构建就是创建对象体(记住是一个聚会体!)
②对象体的表示就是相同的对象构成不同的集合(等于说有a,b,c3种类型对象,可以创建出6种不同的组合,即6种不同的表示)
那如何达到这种同样的对象体的创建算法来创建不同的对象体组合,这也就是Builder的核心。
所以在阅读类模型图时的重点在于构建与表示,即创建方法与不同组合。
------------------------------------------------------------------------------------------
3.类模型图:
在图中,我们可以观察到红字部分的内容。
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意味着其内部包含不同的组件类型。