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

//Creational Patterns--builder
//创建型模式--建造者模式

//1.Builder    抽象建造者
//2.ConcreteBuilder    具体建造者
//3.Director    指挥者
//4.Product 产品


//产品:电脑
class Computer
{
public:
    void SetCpu(string cpu){m_strCpu = cpu;}
    void SetMainBoard(string mainboard){m_strMainBoard = mainboard;}
    void SetRam(string ram){m_strRam = ram;}
    void SetVideoCard(string videocard){m_strVideoCard = videocard;}

    string GetCpu(){return m_strCpu;}
    string GetMainBoard(){return m_strMainBoard;}
    string GetRam(){return m_strRam;}
    string GetVideoCard(){return m_strVideoCard;}

private:
    string m_strCpu;
    string m_strMainBoard;
    string m_strRam;
    string m_strVideoCard;

};
//抽象建造者
class IBuilder
{
public:
    virtual void BuildCpu() = 0;
    virtual void BuildMainBoard() = 0;
    virtual void BuildRam() = 0;
    virtual void BuildVideoCard() = 0;
    virtual Computer* GetResult() = 0;
};

//具体建造者:thinkpad
class ThinkPadBuilder : public IBuilder
{
public:
    ThinkPadBuilder(){m_pComputer = new Computer();}
    ~ThinkPadBuilder(){if(m_pComputer) delete m_pComputer;}
    void BuildCpu(){m_pComputer->SetCpu("i5-6200u");}
    void BuildMainBoard(){m_pComputer->SetMainBoard("Intel DH5700");}
    void BuildRam(){m_pComputer->SetRam("DDR4");}
    void BuildVideoCard(){m_pComputer->SetVideoCard("NVIDIA Geforce 920MX");}
    Computer* GetResult(){return m_pComputer;}

private:
    Computer *m_pComputer;
};

//具体建造者:yoga
class YogaBuilder : public IBuilder
{
public:
    YogaBuilder(){m_pComputer = new Computer();}
    ~YogaBuilder(){if(m_pComputer) delete m_pComputer;}
    void BuildCpu(){m_pComputer->SetCpu("i7-7500u");}
    void BuildMainBoard(){m_pComputer->SetMainBoard("Intel DP55KG");}
    void BuildRam(){m_pComputer->SetRam("DDR5");}
    void BuildVideoCard(){m_pComputer->SetVideoCard("NVIDIA Geforce 950MX");}
    Computer* GetResult(){return m_pComputer;}

private:
    Computer *m_pComputer;
};

//指挥者
class Director
{
public:
    void Create(IBuilder *pbuilder)
    {
        pbuilder->BuildCpu();
        pbuilder->BuildMainBoard();
        pbuilder->BuildRam();
        pbuilder->BuildVideoCard();
    }
};

//---------------------------------------------------------------
//测试
void dpBuilderMain()
{
    Director* pDirector = new Director();
    ThinkPadBuilder *pThinkPadBuilder = new ThinkPadBuilder();
    YogaBuilder* pYogaBuilder = new YogaBuilder();

    //组装两种电脑
    pDirector->Create(pThinkPadBuilder);
    pDirector->Create(pYogaBuilder);

    //获取组装后的电脑
    Computer *pThinkPadComputer = pThinkPadBuilder->GetResult();
    Computer *pYogaComputer = pYogaBuilder->GetResult();

    //分别测试
    cout << "-----ThinkPad-----" << endl;
    cout << "CPU: " << pThinkPadComputer->GetCpu() << endl;
    cout << "MainBoard: " << pThinkPadComputer->GetMainBoard() << endl;
    cout << "RAM: " << pThinkPadComputer->GetRam() << endl;
    cout << "VideoCard: " << pThinkPadComputer->GetVideoCard() << endl;

    cout << "-----Yoga-----" << endl;
    cout << "CPU: " << pYogaComputer->GetCpu() << endl;
    cout << "MainBoard: " << pYogaComputer->GetMainBoard() << endl;
    cout << "RAM: " << pYogaComputer->GetRam() << endl;
    cout << "VideoCard: " << pYogaComputer->GetVideoCard() << endl;

    if(pDirector) delete pDirector;
    if(pThinkPadBuilder) delete pThinkPadBuilder;
    if(pYogaBuilder) delete pYogaBuilder;

    return;
}

猜你喜欢

转载自blog.csdn.net/hhgfg1980/article/details/82936016