设计模式之建造者模式 c++实现和详细分析

来源:互联网 发布:淘宝店铺关闭重新开 编辑:程序博客网 时间:2024/04/27 19:51

定义:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它又叫做生成器模式

实用范围

1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。

UML图:

                                                       


建造者模式的关键是其中的 Director 对象并不直接返回对象,而是通过一步步(BuildPartA,BuildPartB,BuildPartC)来一步步进行对象的创建。当然这里 Director 可以提供一个默认的返回对象的接口(即返回通用的复杂对象的创建,即不指定或者特定唯一指定 BuildPart 中的参数)。



代码

#include<iostream>using namespace std;/*******************************************           建造者模式演示程序            **          by hnust_xiehonghao            **        2014.7.7                  *  *    纪念卢沟桥事变 不忘历史  昂首发展    *******************************************/class Man{};class PersonBuild{public:virtual void BuildHead() = 0;virtual void BuildBody() = 0;virtual void BuildRrm_Leg() = 0;virtual Man* GetPerson() = 0; }; class ThinPersonBuild : public PersonBuild{public:   ThinPersonBuild()   {pThinMan = new Man;   }void BuildHead(){ cout<< "thin head" << endl;}void BuildBody(){//为pThinMan分配一个瘦的身体cout<< "thin Body" << endl;}void BuildRrm_Leg(){cout<< "thin Rrm_Leg" << endl;}  Man* GetPerson(){return pThinMan;}private:Man *pThinMan;}; class FatPersonBuild : public PersonBuild{public:   FatPersonBuild()   {pFatMan = new Man;   }void BuildHead(){cout<< "Fat head" << endl;}void BuildBody(){cout<< "Fat Body" << endl;}void BuildRrm_Leg(){cout<< "Fat Rrm_Leg" << endl;} Man* GetPerson(){return pFatMan;} private:Man *pFatMan;};class Director{public:Director(PersonBuild *Per){Person = Per;}void CreatePerson(){Person->BuildHead();Person->BuildBody();Person->BuildRrm_Leg();}private:    PersonBuild *Person;};int main(){     PersonBuild *buildObj = new ThinPersonBuild(); Director direct(buildObj); direct.CreatePerson(); Man *man = buildObj->GetPerson();return  0;}



   


参考: 

           http://www.jellythink.com/archives/98               这个很吊

          http://www.weixueyuan.net/view/1273.html

0 0
原创粉丝点击