通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。
将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。
#include
class House {
public:
void Show()
{
std::cout <<"House" <
};
class HouseBuilder
{
public:
House* GetResult()
{
return pHouse;
}
virtual ~HouseBuilder() {}
protected:
House* pHouse;
public:
virtual void BuildPart() = 0;
virtual void BuildDrink() = 0;
virtual void BuildCoolDish() = 0;
};
class StoneHouse :public House
{
public:
void Show()
{
std::cout <<"StoneHouse" <
};
class StoneHouseBuilder :public HouseBuilder
{
public:
virtual void BuildPart()
{
std::cout <<"BuildPart" <
virtual void BuildDrink()
{
std::cout <<"BuildDrink" <
virtual void BuildCoolDish()
{
std::cout <<"BuildCoolDish" <
};
class HouseDirector
{
public:
HouseDirector(HouseBuilder* pHouseBuilder)
{
this->pHouseBuilder = pHouseBuilder;
}
House* Construct()
{
pHouseBuilder->BuildPart();
pHouseBuilder->BuildDrink();
pHouseBuilder->BuildCoolDish();
return pHouseBuilder->GetResult();
}
private:
HouseBuilder* pHouseBuilder;
};
int main()
{
HouseBuilder* hb = new StoneHouseBuilder();
HouseDirector* p = new HouseDirector(hb);
p->Construct()->Show();
return 0;
}