简介

建造者模式是指将复杂对象的表示和对象的表示分离出来,这里的“复杂”是很关键的。如果是很简单的对象,不需要使用建造者模式。

UML类图

clipboard.png

示例

大飞机可以说是一个很复杂的对象了,它里面集成了各种各样的系统。假设我们简单抽象分为发动机,机身,机翼,起落装置等。我们在此写一个模拟创造大飞机的小游戏。

产品类,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;
}

one_piece
26 声望8 粉丝

« 上一篇
抽象工厂模式
下一篇 »
工厂方法模式