建造者模式Word格式文档下载.docx
- 文档编号:15906159
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:32.74KB
建造者模式Word格式文档下载.docx
《建造者模式Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《建造者模式Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
"
;
$this->
_type=$type;
}
publicfunctionsetSize($size)
setproductsize<
_size=$size;
publicfunctionsetColor($color)
setproductcolor<
_color=$color;
$config=array(
"
type"
=>
shirt"
size"
xl"
color"
red"
);
//没有使用bulider以前的处理
$oProduct=newProduct();
$oProduct->
setType($config['
type'
]);
setSize($config['
size'
setColor($config['
color'
//创建一个builder类
classProductBuilder
var$_config=null;
var$_object=null;
publicfunctionProductBuilder($config)
_object=newProduct();
_config=$config;
publicfunctionbuild()
---inbuilder---<
_object->
setType($this->
_config['
setSize($this->
setColor($this->
publicfunctiongetProduct()
return$this->
_object;
$objBuilder=newProductBuilder($config);
$objBuilder->
build();
$objProduct=$objBuilder->
getProduct();
定义
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
实用范围
1当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2当构造过程必须允许被构造的对象有不同表示时。
角色:
1.建造者(Builder)角色:
给出一个抽象接口,以规范产品对象的各个组成成分的建造。
一般而言,此接口独立于应用程序的商业逻辑。
模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。
具体建造者类必须实现这个接口所要求的方法:
一个是建造方法,另一个是结果返还方法。
2.具体建造者(ConcreteBuilder)角色:
担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。
这个角色主要完成的任务包括:
实现Builder角色提供的接口,一步一步完成创建产品实例的过程。
在建造过程完成后,提供产品的实例。
3.指导者(Director)角色:
担任这个角色的类调用具体建造者角色以创建产品对象。
导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。
4.产品(Product)角色:
产品便是建造中的复杂对象。
指导者角色是于客户端打交道的角色。
导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。
具体建造者角色是做具体建造工作的,但却不为客户端所知。
五、应用
1.建造者模式的优点
封装性
使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们就不需要关心每一个具体的模型内部是如何实现的,产生的对象类型就是CarModel。
建造者独立,容易扩展
Builder之间是相互独立的,与其它的Builder无关,对系统的扩展非常有利。
便于控制细节风险
模式所建造的最终产品更易于控制:
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
2.建造者模式的使用场景
相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式,需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式是非常合适。
在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。
该种场景,只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段竟然没有发觉,而要通过创建者模式柔化创建过程,本身已经违反设计最初目标。
3.建造者模式的注意事项
建造者模式关注的是的零件类型和装配工艺(顺序),这是它与工厂方法模式最大不同的地方,虽然同为创建类模式,但是注重点不同。
六、和其他模式的区别:
与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车。
classProduct{//产品
privateStringname;
privateStringtype;
publicvoidshowProduct(){
System.out.println("
名称:
+name);
型号:
+type);
publicvoidsetName(Stringname){
this.name=name;
publicvoidsetType(Stringtype){
this.type=type;
}
abstractclassBuilder{//抽象建造者
publicabstractvoidsetPart(Stringarg1,Stringarg2);
publicabstractProductgetProduct();
classConcreteBuilderextendsBuilder{//具体建造者
privateProductproduct=newProduct();
publicProductgetProduct(){
returnproduct;
publicvoidsetPart(Stringarg1,Stringarg2){
product.setName(arg1);
product.setType(arg2);
publicclassDirector{//指导者角色
privateBuilderbuilder=newConcreteBuilder();
publicProductgetAProduct(){
builder.setPart("
宝马汽车"
"
X7"
);
returnbuilder.getProduct();
publicProductgetBProduct(){
奥迪汽车"
Q5"
publicclassClient{
publicstaticvoidmain(String[]args){
Directordirector=newDirector();
Productproduct1=director.getAProduct();
product1.showProduct();
Productproduct2=director.getBProduct();
product2.showProduct();
同工厂模式的区别有,
1可以返回不同的产品,产品很复杂
2,多了一层建造者。
当做一种事情的步骤是必不可少的。
也就是说做这种事情,所有的步骤是不会少的。
但是这些事情的具体做法的步骤实现又是不一样的。
由每个个具体的对象去实现。
比如做一道菜,放盐,油等这些都是不可少的,但是每个人放的量又不一样。
有的时候我们做的时候就可能会因为一件事情的步骤太多而忘记了做某个步骤,造成后面做出来的东西是不能用的。
建造者模式:
它的原理就是像上面那样,为了避免忘记做某个步骤,我们把这些步骤都抽象出来到一个类里面,
然后每个具体的实现都不得不去实现这些步骤(也就是一个方法一样吧),具体方法的实现是由每个具体类自己去
做的,如果就是这样,我们就会发现这时候,等于就是这个吃菜的人吧,他要对做菜的人说,放盐,放油,呵呵,这
完全是没有必要的,所以在建造者模式当中还有一个重要的类,就是指挥者,它和客户和做菜人之间打交道,
客户对着它说做菜,然后它在叫某个具体做菜的人去做咯。
使用建造者模式的场合和好处
使用建造者模式的好处:
1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
使用建造模式的场合:
1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。
四、模式优缺点
优点
1、将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,使得我们能够更加精确的控制复杂对象的产生过程。
2、将产品的创建过程与产品本身分离开来,可以使用相同的创建过程来得到不同的产品。
也就说细节依赖抽象。
3、每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 建造 模式
![提示](https://static.bdocx.com/images/bang_tan.gif)