简介
建造者模式是指将复杂对象的表示和对象的表示分离出来,这里的“复杂”是很关键的。如果是很简单的对象,不需要使用建造者模式。
UML类图
示例
大飞机可以说是一个很复杂的对象了,它里面集成了各种各样的系统。假设我们简单抽象分为发动机,机身,机翼,起落装置等。我们在此写一个模拟创造大飞机的小游戏。
产品类,plain.h
#ifndef PRODUCT_H
#define PRODUCT_H
class CPlane
{
public:
void AddEngine(){};//这些步骤实际实现很复杂,步骤也很多,此处只是简单写了4步
void AddBody(){};
void AddWing(){};
void AddLandgear(){};
};
#endif
建造者类,builder.h
#ifndef BUILDER_H
#define BUILDER_H
#include "plain.h"
class CPlaneBuilder
{
public:
virtual void BuildEngine() = 0;
virtual void BuildBody() = 0;
virtual void BuildSwing() = 0;
virtual void BuildLandgear() = 0;
virtual CPlane* GetPlane() = 0;
};
class CBoeingBuilder:public CPlaneBuilder
{
public:
CBoeingBuilder(){ m_pPlane = new CPlane;}
void BuildEngine(){ m_pPlane->AddEngine();}
void BuildBody(){ m_pPlane->AddBody();}
void BuildSwing(){ m_pPlane->AddWing();}
void BuildLandgear(){ m_pPlane->AddLandgear();}
CPlane* GetPlane(){ return m_pPlane;}
private:
CPlane* m_pPlane;
};
#endif
指挥者类,director.h
#ifndef DIRECTOR_H
#define DIRECTOR_H
#include "builder.h"
class CDirector
{
public:
void CreatePlane(CPlaneBuilder* pBuilder)
{
pBuilder->BuildEngine();
pBuilder->BuildBody();
pBuilder->BuildSwing();
pBuilder->BuildLandgear();
}
};
#endif
客户端使用,main.cpp
#include "director.h"
#define SAFE_DELETE(p) if(p){delete (p); (p) = 0;}
int main(int argc, char* argv[])
{
CDirector* pDirector = new CDirector();
CPlaneBuilder* pBuilder = new CBoeingBuilder;
pDirector->CreatePlane(pBuilder);
CPlane* pPlane = pBuilder->GetPlane();
SAFE_DELETE(pPlane);
SAFE_DELETE(pBuilder);
SAFE_DELETE(pDirector);
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。