建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
属于创建型模式
代码:
#include <iostream>
#include <vector>
#include <iostream>
using namespace std;
//电脑产品
class Computer
{
public:
void addPart(string p)
{
m_vecParts.push_back(p);
}
void showDetails()
{
cout << "电脑建造过程:" << endl;
for (string x : m_vecParts)
{
cout << x.c_str() << endl;
}
}
private:
vector<string> m_vecParts;
};
class Builder
{
public:
virtual ~Builder(){}
virtual void buildScreen() = 0;
virtual void buildKeyboard() = 0;
virtual Computer* getComputer() = 0;
};
class ConcreteBuilderA :public Builder
{
public:
ConcreteBuilderA() :m_computer(nullptr)
{
m_computer = new Computer;
}
~ConcreteBuilderA()
{
if (m_computer)
{
delete m_computer;
m_computer = nullptr;
}
}
void buildScreen()
{
m_computer->addPart("电脑屏幕A");
}
void buildKeyboard()
{
m_computer->addPart("内设键盘A");
}
Computer* getComputer()
{
return m_computer;
}
private:
Computer *m_computer;
};
class ConcreteBuilderB :public Builder
{
public:
ConcreteBuilderB() :m_computer(nullptr)
{
m_computer = new Computer;
}
~ConcreteBuilderB()
{
if (m_computer)
{
delete m_computer;
m_computer = nullptr;
}
}
void buildScreen()
{
m_computer->addPart("电脑屏幕B");
}
void buildKeyboard()
{
m_computer->addPart("内设键盘B");
}
Computer* getComputer()
{
return m_computer;
}
private:
Computer *m_computer;
};
class Director
{
public:
void build(Builder *build)
{
build->buildScreen();
build->buildKeyboard();
}
};
//客户端
int main()
{
Director *director = new Director;
Builder *buildA = new ConcreteBuilderA;
Builder *buildB = new ConcreteBuilderB;
director->build(buildA);
Computer *computerA = buildA->getComputer();
computerA->showDetails();
director->build(buildB);
Computer *computerB = buildB->getComputer();
computerB->showDetails();
if (director)
{
delete director;
director = nullptr;
}
if (buildA)
{
delete buildA;
buildA = nullptr;
}
if (buildB)
{
delete buildB;
buildB = nullptr;
}
return 0;
}
效果: