文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>设计模式之建造者(builder)模式

设计模式之建造者(builder)模式

时间:2010-10-05  来源:chenchao40322

建造者模式把一个复杂的对象的与他的表示分离,使得同样的构造过程可以构建不同的表示(大话设

 

计模式)。它把对象的各个组件的组装隐藏起来,对外提供一个组装方法,并对外提供一个对象表现

 

的抽象接口,调用者通过实现此表现抽象接口来实现多种对象的表现,然后调用组装方法来组装出目

 

标表对象。

 

代码如下:

 

//零部件的基类,外部调用者通过实现此接口来表现各个零部件

class PersonBuilder           
{
public:
    PersonBuilder(){};
    virtual ~PersonBuilder(){};
    virtual void BuildHead()=0;
    virtual void BuildBody()=0;
    virtual void BuildArmLeft()=0;
    virtual void BuildArmRight()=0;
    virtual void BuildLegLeft()=0;
    virtual void BuildLegRight()=0;
};

 

//组件组装类,外部通过调用此类的组装方法

CreatePerson来组装出对象。

class PersonDirector
{
private:
    PersonBuilder* _pPersonBuilder;
public:
    PersonDirector():_pPersonBuilder(0){};
    PersonDirector(PersonBuilder* pPersonBuilder):_pPersonBuilder(pPersonBuilder){};
    ~PersonDirector();
    void CreatePerson();
};

PersonDirector::~PersonDirector()
{
    if(_pPersonBuilder!=0)
        delete _pPersonBuilder;
}

void PersonDirector::CreatePerson()
{
    _pPersonBuilder->BuildHead();
    _pPersonBuilder->BuildBody();
    _pPersonBuilder->BuildArmLeft();
    _pPersonBuilder->BuildArmRight();
    _pPersonBuilder->BuildLegLeft();
    _pPersonBuilder->BuildLegRight();
}

 

//调用者实现的一个组件的表现

class PersonFatBuilder : public PersonBuilder
{
public:
    PersonFatBuilder(){};
    ~PersonFatBuilder(){};
    void BuildHead();
    void BuildBody();
    void BuildArmLeft();
    void BuildArmRight();
    void BuildLegLeft();
    void BuildLegRight();
};

void PersonFatBuilder::BuildHead()
{
    std::cout<&lt;"胖头"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildBody()
{
    std::cout&lt;&lt;"胖身子"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildArmLeft()
{
    std::cout&lt;&lt;"胖左手"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildArmRight()
{
    std::cout&lt;&lt;"胖右手"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildLegLeft()
{
    std::cout&lt;&lt;"胖左腿"&lt;&lt;std::endl;
}
void PersonFatBuilder::BuildLegRight()
{
    std::cout&lt;&lt;"胖右腿"&lt;&lt;std::endl;
}

 

//调用者的调用代码。

int main()
{
    PersonDirector* pPersonDirector=new   PersonDirector(new PersonFatBuilder);
    pPersonDirector->CreatePerson();
    return 0;
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载