C++建造者模式(4)

//电脑组装:显示器、鼠标、键盘、主机(主机又包括cpu、显卡、主板等)
// 1.找到店铺老板告诉需求
// 2.客服安排技术员工组装
// 3.产品组装完成

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class AbstractProduct {
   public:
    virtual void SetDisplayer(string displayer) = 0;
    virtual void SetMouse(string mouse) = 0;
    virtual void SetKeyBoard(string keyBoard) = 0;
    virtual void SetHost(string host) = 0;
    virtual void Show() = 0;
    // vector<string> m_list;	//电脑清单
};

class Computer : public AbstractProduct {
    void SetDisplayer(string displayer) { m_list.push_back(displayer); }
    void SetMouse(string mouse) { m_list.push_back(mouse); }
    void SetKeyBoard(string keyBoard) { m_list.push_back(keyBoard); }
    void SetHost(string host) { m_list.push_back(host); }
    void Show() {
        cout << "组装电脑配置:" << endl;
        for (auto v : m_list) {
            cout << v << endl;
        }
    }
    vector<string> m_list;  //电脑清单
};
//抽象建造者
class AbstarctBuilder {
   public:
    AbstarctBuilder() : product(new Computer) {}
    virtual void BuildDisplayer(string displayer) = 0;
    virtual void BuildMouse(string mouse) = 0;
    virtual void BuildKeyBoard(string keyBoard) = 0;
    virtual void BuildHost(string host) = 0;
    AbstractProduct* GetProduct() { return product; }

   protected:
    AbstractProduct* product;
};
//具体建造者:技术人员
class ConcreteBuilder : public AbstarctBuilder {
   public:
    virtual void BuildDisplayer(string displayer) {
        product->SetDisplayer(displayer);
    }
    void BuildMouse(string mouse) { product->SetMouse(mouse); }
    void BuildKeyBoard(string keyBoard) { product->SetKeyBoard(keyBoard); }
    void BuildHost(string host) { product->SetHost(host); }
};
//指挥者
class Director {
   public:
    Director(AbstarctBuilder* pBuilder) : pBuilder(pBuilder) {}
    AbstractProduct* Construct(string displayer,
                               string mouse,
                               string keyBoard,
                               string host) {
        pBuilder->BuildDisplayer(displayer);
        pBuilder->BuildMouse(mouse);
        pBuilder->BuildKeyBoard(keyBoard);
        pBuilder->BuildHost(host);
        return pBuilder->GetProduct();
    }

   private:
    AbstarctBuilder* pBuilder;
};

int main() {
    AbstarctBuilder* pB = new ConcreteBuilder;
    Director* pD = new Director(pB);
    AbstractProduct* pC =
        pD->Construct("华为显示器", "牧马人鼠标", "雷蛇键盘", "外星人");
    pC->Show();
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值