首页 / 设计模式 / 【设计模式】建造者模式
【设计模式】建造者模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【设计模式】建造者模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3794字,纯文字阅读大概需要6分钟。
内容图文
![【设计模式】建造者模式](/upload/InfoBanner/zyjiaocheng/1201/2a2d32578e24437eb2288879c1617958.jpg)
设计模式 之 建造者模式
//
建造者模式
/*
***********************************************************************
【建造者】提供了建造动作的接口
【具体建造者】去实现【建造者】的每个接口,对每个【具体建造者】来说,
创建【产品】的步骤相同,不同的只是“细节”
【产品】即每个【具体建造者】的实例
【指挥者】中去调用创建【产品】的每个接口,利用多台性质去调用每个【具体建造者】
实现的接口。
--------------------------------------------------------------------------
本文以生产不同型号的手机为例来说明,一个品牌的手机都有许多【型号】,这里的
不同【型号】即为不同的【具体创建者】,不同【型号】的手机只是“配置”不同,
生产手机的过程是相同的,[装主板]、[装GPS]、[装陀螺仪]、[装屏幕]、[装电池]、
[装外壳]等。
这些组装动作即为【建造者】提供的接口,而每个手机就是【产品】,【指挥者】可以
理解为“装配流水线”,流水线根据不同种类的【型号】去组装不同的元器件,从而
组装成一部手机。
注:实际可能是一种型号的手机对应一条流水线,而非前文所述的一条流水线可组装
多重型号的手机,但在这里姑且认为一条流水线对应多种型号。
***********************************************************************
*/
【建造者】类,提供了组装手机的动作接口
//
【建造者】类,提供组装手机的操作接口
class
CPhoneBuilder
{
public
:
CPhoneBuilder();
virtual ~CPhoneBuilder();
virtualvoid ZhuangMainbord() = 0; //装主板virtualvoid ZhuangGPS() = 0; //装GPSvirtualvoid ZhuangTuoluoyi() = 0; //装陀螺仪virtualvoid ZhuangScreen() = 0; //装屏幕virtualvoid ZhuangWaike() = 0; //装外壳};
CPhoneBuilder::CPhoneBuilder(){}
CPhoneBuilder::~CPhoneBuilder(){}
【三星S4】,一个【具体建造者】,也是一个【型号】, 实现了【建造者】的组装手机的接口
//
【三星S4】,一个具体的建造者
class CS4Builder : public CPhoneBuilder
{
public:
CS4Builder();
virtual ~CS4Builder();
virtualvoid ZhuangMainbord(); //装主板virtualvoid ZhuangGPS(); //装GPSvirtualvoid ZhuangTuoluoyi(); //装陀螺仪virtualvoid ZhuangScreen(); //装屏幕virtualvoid ZhuangWaike(); //装外壳};
CS4Builder::CS4Builder(){cout<<"建造三星S4\n";}
CS4Builder::~CS4Builder(){}
void CS4Builder::ZhuangMainbord() {cout << "组装 型号A 主板\n";}
void CS4Builder::ZhuangGPS() {cout << "组装 型号A GPS\n";}
void CS4Builder::ZhuangTuoluoyi() {cout <<" 组装 型号A 陀螺仪\n";}
void CS4Builder::ZhuangScreen() {cout << "组装 型号A 大猩猩玻璃屏\n";}
void CS4Builder::ZhuangWaike() {cout << "组装 金属外壳A\n";}
【三星S5】,一个【具体建造者】,也是一个【型号】, 实现了【建造者】的组装手机的接口
//
【三星S5】,一个具体建造者
class CS5Builder : public CPhoneBuilder
{
public:
CS5Builder();
virtual ~CS5Builder();
virtualvoid ZhuangMainbord(); //装主板virtualvoid ZhuangGPS(); //装GPSvirtualvoid ZhuangTuoluoyi(); //装陀螺仪virtualvoid ZhuangScreen(); //装屏幕virtualvoid ZhuangWaike(); //装外壳};
CS5Builder::CS5Builder() {cout << "建造三星S5\n";}
CS5Builder::~CS5Builder() {}
void CS5Builder::ZhuangMainbord() {cout << "组装 型号C 主板\n";}
void CS5Builder::ZhuangGPS() {cout << "组装 型号C GPS\n";}
void CS5Builder::ZhuangTuoluoyi() {cout <<" 组装 型号C 陀螺仪\n";}
void CS5Builder::ZhuangScreen() {cout << "组装 型号C 大猩猩玻璃屏\n";}
void CS5Builder::ZhuangWaike() {cout << "组装 塑料外壳C\n";}
【指挥者】类,指挥者根据传入的不同【型号】,去调用不同的【组装动作】,这些【组装动作】的细节不同,【细节】即手机的“配置”或“参数”不同,有的“为发烧而生”, 有的“忘记参数”,有的“重新定义了手机”。
//
【指挥者】类,即组装流水线
class
CLineDirector
{
public
:
CLineDirector();
virtual ~CLineDirector();
//建造手机(多态性质)void CreatePhone(CPhoneBuilder* builder);
};
CLineDirector::CLineDirector() {cout << std::endl << "准备建造手机" << std::endl<<std::endl;}
CLineDirector::~CLineDirector(){}
void CLineDirector::CreatePhone(CPhoneBuilder* builder)
{
if(NULL == builder) { cerr << std::endl << "不知道你要造神马手机" << std::endl; return;}
builder->ZhuangMainbord();
builder->ZhuangGPS();
builder->ZhuangTuoluoyi();
builder->ZhuangScreen();
builder->ZhuangWaike();
}
客户端
//
客户端
int _tmain(int argc, _TCHAR* argv[])
{
CLineDirector director;
CS4Builder s4;
director.CreatePhone(&s4);
cout<<endl<<endl;
CS5Builder s5;
director.CreatePhone(&s5);
cout<<endl<<endl;
return0;
}
运行情况
PS:
当在【指挥者】的CreatePhone函数中调用一系列组装函数时,感觉有点类似于前面的【外观模式】,又感觉有区别,
外观模式中:【外观】类中提供了一些列函数,这些函数是对各个【子系统】的函数调用的封装,或者个数不同,或者顺序不同,并没有一个各个子系统的“基类”,也没有用到【多态】性质;
建造者模式中:【建造者】首先是一个基类,他的多个子类(即【具体建造者】)是对该【建造者】类中的接口的不同实现,而各个子类在创建对象的时候,对这些接口(动作或操作)的步骤/调用顺序/流程 是相同的, 然后依赖于【指挥者】类中的不同输入,根据多态性质去调用不同的子类中的各个操作(去接口的实现)。
原文:http://www.cnblogs.com/cuish/p/3773654.html
内容总结
以上是互联网集市为您收集整理的【设计模式】建造者模式全部内容,希望文章能够帮你解决【设计模式】建造者模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。