创造型设计模式之建造者模式

特点:将复杂对象的构建过程和最终表示分离开来

比如组装电脑,构建过程是依次安装 CPU、内存、硬盘等组件 ;而表示是组装完

 1 #include <iostream>
 2 #include <mutex>
 3 #include <string>
 4 using namespace std;
 5 
 6 /*-----------------------------------------------------------建造者模式------------------------------------------------------------------*/
 7 
 8 class Computer // 产品
 9 {
10 public:
11     void setcpu(const std::string &cpu) { m_cpu = cpu; }
12     void setgpu(const std::string &gpu) { m_gpu = gpu; }
13     void setmemory(const std::string &memory) { m_memory = memory; }
14     void setstorage(const std::string storage) { m_storage = storage; }
15 
16     void pointcfg() { std::cout << "cpu:" << m_cpu << '\n'
17                                 << "gpu:" << m_gpu << '\n'
18                                 << "memory:" << m_memory << '\n'
19                                 << "storage:" << m_storage << '\n'; }
20 
21 private:
22     string m_cpu;
23     string m_gpu;
24     string m_memory;
25     string m_storage;
26 };
27 
28 class computerbuilder // 抽象一个建造者
29 {
30 public:
31     virtual ~computerbuilder() = default;
32     virtual void buildcpu() = 0;
33     virtual void buildgpu() = 0;
34     virtual void buildmemory() = 0;
35     virtual void buildstorage() = 0;
36     virtual Computer *getcomputer() = 0;
37 };
38 
39 class gamecomputerbuilder : public computerbuilder // 具体一个游戏本电脑建造者
40 {
41 public:
42     gamecomputerbuilder() { m_ptr = new Computer; };
43     void buildcpu() override { m_ptr->setcpu("游戏CPU"); }
44     void buildgpu() override { m_ptr->setgpu("游戏GPU"); }
45     void buildmemory() override { m_ptr->setmemory("游戏MEMORY"); }
46     void buildstorage() override { m_ptr->setstorage("游戏STORAGE"); }
47     Computer *getcomputer() override { return m_ptr; }
48 
49 private:
50     Computer *m_ptr;
51 };
52 
53 class workcomputerbuilder : public computerbuilder // 具体一个商务电脑建造者
54 {
55 public:
56     workcomputerbuilder() { m_ptr = new Computer; }
57     void buildcpu() override { m_ptr->setcpu("商务CPU"); }
58     void buildgpu() override { m_ptr->setgpu("商务GPU"); }
59     void buildmemory() override { m_ptr->setmemory("商务MEMORY"); }
60     void buildstorage() override { m_ptr->setstorage("商务STORAGE"); }
61     Computer *getcomputer() override { return m_ptr; }
62 
63 private:
64     Computer *m_ptr;
65 };
66 
67 class builderconductor // 指挥者,负责具体的构造工作
68 {
69 public:
70     explicit builderconductor() = delete;
71     static void startgeneratecomputer(computerbuilder *ptr)
72     {
73         ptr->buildcpu();
74         ptr->buildgpu();
75         ptr->buildmemory();
76         ptr->buildstorage();
77     }
78 };
79 
80 int main(int argc, char *argv[])
81 {
82     //构造游戏电脑
83     gamecomputerbuilder *gameptr = new gamecomputerbuilder;
84     builderconductor::startgeneratecomputer(gameptr);
85     gameptr->getcomputer()->pointcfg();
86     // 构造商务电脑
87     workcomputerbuilder *workptr = new workcomputerbuilder;
88     builderconductor::startgeneratecomputer(workptr);
89     workptr->getcomputer()->pointcfg();
90     return 0;
91 }

 

成后电脑呈现出的整体配置状态。通过分离,可灵活改变构建过程或表示方式,如用不同品牌组件构建,不影响电脑作为最终产品的呈现

posted @ 2025-05-22 17:08  璀丶璨星灬空  阅读(6)  评论(0)    收藏  举报