理财平台网站建设,主机域名网站源码,网页打不开视频怎么办,免费设计房屋效果图软件有哪些作者#xff1a;翟天保Steven 版权声明#xff1a;著作权归作者所有#xff0c;商业转载请联系作者获得授权#xff0c;非商业转载请注明出处 一、建造者模式是什么#xff1f; 建造者模式是一种创建型的软件设计模式#xff0c;用于构造相对复杂的对象。 建造者模式可以…作者翟天保Steven 版权声明著作权归作者所有商业转载请联系作者获得授权非商业转载请注明出处 一、建造者模式是什么 建造者模式是一种创建型的软件设计模式用于构造相对复杂的对象。 建造者模式可以将复杂对象的构建与它的表示分离使得相同的构建过程可以得到不同的表示。如果说工厂模式和抽象工厂模式更注重产品整体那建造者模式则更在乎产品的组成和细节。 建造者模式的优点
封装性好。有效地封装了建造过程主要业务逻辑使得系统整体的稳定性得到了一定保证。解耦。产品本身和建造过程解耦相同的建造过程可以创建出不同的产品。产品建造过程精细化。该模式注重产品创建的整个过程将复杂的步骤拆解得到多个相对简单的步骤使得系统流程更清晰且对细节的把控更精准。易于扩展。如果有新产品需求只需要添加一个建造者类即可不需要改动之前的代码符合开闭原则。建造者模式的缺点
产品的组成部分和构建过程要一致限制了产品的多样性。若产品内部有结构上的变化则整个系统都要进行大改增加了后期维护成本。二、建造者模式
2.1 结构图 客户端即Main主函数创建监督者由监督者带领不同的建造者完成电脑产品的不同表示。 2.2 代码示例 场景描述我联系了一家外包公司由他们的项目经理招人为我组建一批电脑他先招了联想的团队项目结束后我想再弄一批对比下甲方财大气粗于是他们又招了惠普的团队再次完成项目非常不错。
//Product.h
/****************************************************/
#pragma once
#include iostreamusing namespace std;// 电脑产品类
class Computer
{
public:// 获取电脑信息void getComputer() {cout 电脑产品配置为 endl;cout 处理器 getCPU() endl;cout 显 卡 getGPU() endl;cout 主 板 getMainBoard() endl;cout 内存条 getRAM() endl;}// 设置处理器void setCPU(string cpu){CPU cpu;}// 设置显卡void setGPU(string gpu) {GPU gpu;}// 设置主板void setMainBoard(string mb) {mainboard mb;}// 设置内存条void setRAM(string ram) {RAM ram;}// 获取处理器string getCPU() {return CPU;}// 获取显卡string getGPU() {return GPU;}// 获取主板string getMainBoard() {return mainboard;}// 获取内存条string getRAM() {return RAM;}private:string CPU; // 处理器string GPU; // 显卡string mainboard; // 主板string RAM; // 内存条
};//Builder.h
/****************************************************/
#pragma once
#include iostream
#include Product.husing namespace std;// 抽象建造者
class Builder
{
public:// 装配CPUvirtual void addCPU() 0;// 装配GPUvirtual void addGPU() 0;// 装配主板virtual void addMainBoard() 0;// 装配内存virtual void addRAM() 0;// 获取电脑产品Computer getComputer() {return m_computer;}protected:Computer m_computer; // 电脑产品
};// 联想-建造者
class LenovoBuilder : public Builder
{
public:// 装配CPUvirtual void addCPU() {m_computer.setCPU(Intel 酷睿i7-8700K);}// 装配GPUvirtual void addGPU() {m_computer.setGPU(RTX 4050);}// 装配主板virtual void addMainBoard() {m_computer.setMainBoard(B760);}// 装配内存virtual void addRAM() {m_computer.setRAM(三星DDR4 2666mhz 16G);}
};// 惠普-建造者
class HPBuilder : public Builder
{
public:// 装配CPUvirtual void addCPU() {m_computer.setCPU(Intel 酷睿i5-6300HQ);}// 装配GPUvirtual void addGPU() {m_computer.setGPU(GTX 1060);}// 装配主板virtual void addMainBoard() {m_computer.setMainBoard(B660);}// 装配内存virtual void addRAM() {m_computer.setRAM(金士顿DDR4 2666mhz 16G);}
};//Director.h
/****************************************************/
#pragma once
#include iostream
#include Builder.husing namespace std;// 监督者
class Director
{
public:// 构造函数Director(Builder* builder) {m_builder builder;}// 析构函数~Director() {if (m_builder ! nullptr)delete m_builder;}// 替换建造者void setBuilder(Builder *builder) {m_builder builder;}// 建造Computer construct() {m_builder-addCPU();m_builder-addGPU();m_builder-addMainBoard();m_builder-addRAM();return m_builder-getComputer();}
private:Builder *m_builder; // 建造者
};
//main.cpp
/****************************************************/
#include iostream
#include string
#include Director.husing namespace std;int main()
{// 一号建造者-联想Builder *builder1 new LenovoBuilder();cout 联想建造者等待就业。 endl;// 由监督者监督项目启动Director *director new Director(builder1);cout 监督者项目经理开始招人做项目。 endl;// 联想项目完毕获取联想电脑产品Computer computer1 director-construct();cout 联想项目结束。 endl;computer1.getComputer();// 二号建造者-惠普Builder *builder2 new HPBuilder();cout 惠普建造者等待就业。 endl;// 替换建造者director-setBuilder(builder2);cout 监督者项目经理替换建造者做新项目。 endl;Computer computer2 director-construct();cout 惠普项目结束。 endl;computer2.getComputer();return 0;
} 程序结果如下。 在上述示例中我们可以看到产品有相同的构建过程但是不同的建造者却可以完成不同表示的产品产品的结构类似但具体内容各不相同。 三、总结 我尽可能用较通俗的话语和直观的代码例程来表述我对建造者模式的理解或许有考虑不周到的地方如果你有不同看法欢迎评论区交流希望我举的例子能帮助你更好地理解建造者模式。 如果文章帮助到你了可以点个赞让我知道我会很快乐~加油