设计模式(三)建造者模式
建造者模式
建造者模式也属于创建模式,它提供了一种创建对象的最佳方式。
定义:将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
例子:
工厂(建造者模式):负责制造汽车(组装过程和细节在工厂内)
汽车购买者(用户):你只要说出你需要的型号(对象的类型和内容),然后直接购买就可以使用了(不需要知道汽车是怎么组成的(车轮、车门、发动机、方向盘))等
比如建一个房子(地基,钢筋工程,铺垫线,粉刷等来实现)包工头首先建一个抽象类(Bulider),把产品的图纸(Product)给了工人,工人(worker)按照包工头的图纸去建造,然后老板(director)去指挥它们去实现。
Builder(一个整体的产品需要什么)
包裹。com。我的。工厂。建筑商;
//抽象的建造者:方法
公共抽象类生成器{
抽象void Buildera();//地基
抽象void BuildErab();//钢筋工程
抽象void BuildErac();//铺垫线
抽象void BuildErad();//粉刷
//完工:得到产品
抽象产品getProducT();
}
Product
包裹。com。我的。工厂。建筑商;
//产品:房子
公共类产品{
私有字符串建筑a
私有字符串构建b
私有字符串buildC
私有字符串构建;
公共字符串GetBuildA(){ 0
返回建筑a
}
public void setBuilda(String Builda){ 0
this.buildA=buildA
}
公共字符串GetBuildB(){ 0
返回构建b
}
公共void setBuildB(字符串BuildB){ 0
this.buildB=buildB
}
公共字符串GetBuildC(){ 0
返回buildC
}
public void setBuildc(String Buildc){ 0
this.buildC=buildC
}
公共字符串GetBuild(){ 0
返回构建
}
公共void setBuildD(字符串生成){ 0
this.buildD=buildD
}
@覆盖
公共字符串ToString(){ 0
返回"产品{"
buildA=' ' buildA ' \ ' '
,buildB=' ' buildB ' \ ' '
,buildC=' ' buildC ' \ ' '
,buildD=' ' buildD ' \ '
'}';
}
}
worker
包裹。com。我的。工厂。建筑商;
//具体的建造者:工人
公共类工人扩展了建筑商{
私人产品;
公共工作者(){ 0
产品=新产品();
}
@覆盖
void Builderaa(){ 0
product.setBuildA('地基');
System.out.println('地基');
}
@覆盖
void BuildErab(){ 0
product.setBuildA('钢筋');
System.out.println('钢筋');
}
@覆盖
void BuildErac(){ 0
product.setBuildA('铺垫线');
System.out.println('铺垫线');
}
@覆盖
void BuildErad(){ 0
product.setBuildA('粉刷墙面');
System.out.println('粉刷墙面');
}
@覆盖
产品GetProducT(){ 0
退货产品;
}
}
Directory
包裹。com。我的。工厂。建筑商;
//指挥:核心负责构建一个工程,工程如何构建,由它决定
公开课导演{
//指挥工人按顺序建房子
公共产品构建(构建器构建器){ 0
建筑商。build era();
建筑商。builder ab();
建筑商。builder AC();
建筑商。builder ad();
返回生成器。getProducT();
}
}
交工(测试)
包裹。com。我的。工厂。建筑商;
公共类测试{
公共静态void main(String[]参数){ 0
//指挥
董事董事=新董事();
//指挥具体的工人完成产品
产品构建=导演。build(新Worker());
字符串s=构建。ToString();
系统。出去。println
}
}
总结
上面的例子是Builder模式的常规方法。编导类在Builder模式中起着重要的作用。它用于指导如何构建产品、控制调用顺序以及将完整的产品类返回给调用。但是,在某些情况下,有必要简化系统结构,并将Director与抽象构建器结合起来。
另一种案列见建造者模式之链式编程
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/116875.html