zoukankan      html  css  js  c++  java
  • 2021.10.2 建造者模式

    一、今日学习内容

        

    1、类图

    2、代码

    #include<iostream>
    using namespace std;
    #include<string>
    
    class Computer 
    {
    private:
        string host;      //主机
        string internal;  //内存
        string harddisk;  //硬盘
    public:
        void setHost(string host) 
        {
            this->host = host;
        }
        void setInternal(string internal)
        {
            this->internal = internal;
        }
        void setHarddisk(string harddisk)
        {
            this->harddisk = harddisk;
        }
        string getHost()
        {
            return host;
        }
        string getInternal()
        {
            return internal;
        }
        string getHarddisk()
        {
            return harddisk;
        }
    };
    
    class ComputerBuilder
    {
    public:
        virtual void buildHost()=0;
        virtual void buildInternal()=0;
        virtual void buildHarddisk()=0;
        Computer getComputer()
        {
            return computer;
        }
    protected:
        Computer computer;
    };
    
    class Desktop : public ComputerBuilder
    {
    public:
    
        void buildHost()
        {
            computer.setHost("台式机主机");
        }
    
        void buildInternal()
        {
            computer.setInternal("台式机内存");
        }
    
        void buildHarddisk()
        {
            computer.setHarddisk("台式机硬盘");
        }
    
    };
    
    class Laptop : public ComputerBuilder
    {
    public:
    
        void buildHost()
        {
            computer.setHost("笔记本主机");
        }
    
        void buildInternal()
        {
            computer.setInternal("笔记本内存");
        }
    
        void buildHarddisk()
        {
            computer.setHarddisk("笔记本硬盘");
        }
    
    };
    
    class Worker
    {
    private:
        ComputerBuilder *cb;
    public:
        void setComputerBuilder(ComputerBuilder *cb)
        {
            this->cb = cb;
        }
        Computer construct()
        {
            cb->buildHost();
            cb->buildInternal();
            cb->buildHarddisk();
            return cb->getComputer();
        }
    };
    
    int main()
    {
        string t;
        cout << "请输入电脑类型:";
        cin >> t;
        Worker *worker = new Worker();
        if (!t.compare("Desktop")) {
            ComputerBuilder * cb = new Desktop();
            worker->setComputerBuilder(cb);
    
        }
        else
        {
            ComputerBuilder * cb = new Laptop();
            worker->setComputerBuilder(cb);
        }
        Computer  computer = worker->construct();
        cout << "部件组成:" << endl;
        cout << computer.getHost() << endl;
        cout << computer.getInternal() << endl;
        cout << computer.getHarddisk() << endl;
    }
     

    3、运行截图

     
     
     
     
  • 相关阅读:
    QT 图形视图框架
    QSting, QChar, char等的转换
    ucosii(2.89)mbox 应用要点
    ucosii(2.89)semaphore 应用要点
    ucosii(2.89)mutex 应用要点
    ucosii(2.89) 在Lpc1765移植中定时器的使用。
    c++中虚函数的需要性,虚析构函数的必要性
    转 在Qt中用QAxObject来操作Excel
    关于 QObject 类
    关于sigleton模式
  • 原文地址:https://www.cnblogs.com/wmdww/p/14157767.html
Copyright © 2011-2022 走看看