C++设计模式——建造者模式
建造者模式:将一个复杂对象的构建过程与它的构建细节分离,使得同样的构建过程可以执行不同的表示。
优点: 使得建造代码与表示代码分离,由于建设者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要定义一个具体的建造者就可以了
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; //Product Class,产品类,由多个部件组成。 class Product { private: vector<string> parts; public: //添加产品部件 void Add(string part) { parts.push_back(part); } //显示所有的产品部件 void Show() { std::cout << "产品 创建" << std::endl; for_each(parts.cbegin(), parts.cend(), [](const string& s) {cout << s << " "; }); cout << endl; } }; //Builder,抽象建造者,并声明一个得到产品建造后结果的方法GetResult。 class Builder { public: virtual ~Builder() = default; virtual void BuildPartA() = 0; virtual void BuildPartB() = 0; virtual Product* GetResult() = 0; }; //ConcreteBuilder1,具体建造者类,实现Builder接口中的具体方法。 class ConcreteBuilder1 :public Builder { private: Product* product = new Product; public: void BuildPartA()override { product->Add("部件A"); } void BuildPartB()override { product->Add("部件B"); } Product* GetResult()override { return product; } }; //ConcreteBuilder2,具体建造者类,实现Builder接口中的具体方法。 class ConcreteBuilder2 :public Builder { private: Product* product = new Product; public: void BuildPartA()override { product->Add("部件X"); } void BuildPartB()override { product->Add("部件Y"); } Product* GetResult()override { return product; } }; class Director // 指挥者类,指挥建造Product的过程(控制构建各部分组件的顺序)。 { public: void Construct(Builder* const b) { b->BuildPartA(); b->BuildPartB(); } }; int main() {//用户并不需要知道具体的建造过程,只需指定建造 Product 具体类型。 Director director; Builder* b1 = new ConcreteBuilder1; Builder* b2 = new ConcreteBuilder2; cout << "用ConcreteBuilder1的方法建造产品:" << endl; director.Construct(b1); Product* p1 = b1->GetResult(); p1->Show(); cout << endl; cout << "用ConcreteBuilder2的方法建造产品:" << endl; director.Construct(b2); Product* p2 = b2->GetResult(); p2->Show(); cout << endl; delete p2; delete p1; delete b1; delete b2; p2 = p1 = nullptr; b1 = b2 = nullptr; system("pause"); return 0; }
参考——大话设计模式
参考——https://blog.csdn.net/qq_34536551/article/details/89184372
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧