Skip to content

构建模式

回到目录

参考链接:

简介

UML类图

代码示例

#include <iostream>
#include <string>

using namespace std;

// 电脑构建
class ComputerBuild
{
public:
    ~ComputerBuild() { cout << "~ComputerBuild" << endl; };
    virtual void BuildCPU() = 0;
    virtual void BuildGPU() = 0;
    virtual void BuildBoard()= 0;
};

// 构造神州电脑
class HaseeComputerBuild : public ComputerBuild
{
public:
    ~HaseeComputerBuild() { cout << "~HaseeComputerBuild" << endl; };
    void BuildCPU() override { cout << "build Hasee CPU" << endl; }
    void BuildGPU() override { cout << "build Hasee GPU" << endl; }
    void BuildBoard() override { cout << "build Hasee Board" << endl; }
};

// 构造联想电脑
class LenovoComputerBuild : public ComputerBuild
{
public:
    ~LenovoComputerBuild() { cout << "~LenovoComputerBuild" << endl; };
    void BuildCPU() override { cout << "build Lenovo CPU" << endl; }
    void BuildGPU() override { cout << "build Lenovo GPU" << endl; }
    void BuildBoard() override { cout << "build Lenovo Board" << endl; }
};

class Director
{
public:
    Director(ComputerBuild *builder) { m_pBuilder = builder; }
    ~Director() { cout << "~Director" << endl; };
    void Create() {
        m_pBuilder->BuildCPU();
        m_pBuilder->BuildGPU();
        m_pBuilder->BuildBoard();
    }
private:
    ComputerBuild *m_pBuilder;
};

int main(int argc, char *argv[])
{
    HaseeComputerBuild *hasee = new HaseeComputerBuild();
    LenovoComputerBuild *lenovo = new LenovoComputerBuild();
    Director *director = nullptr;

    director = new Director(hasee);
    director->Create();
    delete director;
    director = nullptr;

    director = new Director(lenovo);
    director->Create();
    delete director;
    director = nullptr;

    delete hasee;
    delete lenovo;

    return 0;
}