本文系转载,转载地址http://blog.sina.com.cn/s/blog_59b6af690100zj3l.html,只供自己学习使用。

假设现在有三种产品,是玩具,都是由三部分组成,头,身体,和脚丫,
现在要实现生产不同组合产品的功能,例如
第一种产品是红头,绿身体,黑脚
第二种产品是绿头,黑身体,红脚
第三种产品是黑头,红身体,绿脚丫
现在现写一个build基类,

class  builder
{
public:
virtual void buildpartHead(const char* str="pre-define")=;
virtual void buildpartBody(const char* str="pre-define")=;
virtual void buildpartFoot(const char* str="pre-define")=;
};

具体实现类:第一种产品各个零部件的生产

class builder_Kindone:public builder
{
public:
builder_Kindone(){cout<<"kindone is creating.......\n";}
void buildpartHead(const char* str="red.")
{
first->setcolor_Head("red.head");
}
void buildpartBody(const char* str="blue.")
{
first->setcolor_Body("green.body");
}
void buildpartFoot(const char* str="black.")
{
first->setcolor_Foot("black.foot");
} productFirst* GetProduct()
{
// buildpartHead();buildpartBody();buildpartFoot();
return first;
}
private:
productFirst* first;
};

第二种产品各个零部件的生产

class builder_Kindtwo:public builder
{
public:
builder_Kindtwo(){cout<<"kindtwo is creating.......\n";}
void buildpartHead(const char* str="green")
{
second->setcolor_Head("green.head");
}
void buildpartBody(const char* str="black")
{
second->setcolor_Body("black.body");
}
void buildpartFoot(const char* str="red")
{
second->setcolor_Foot("red.foot");
} productSecond* GetProduct()
{ //buildpartHead();buildpartBody();buildpartFoot();
return second;
}
private:
productSecond* second;
};

现在来看看产品类 第一种产品,包括三个部件

class productFirst
{
public:
void setcolor_Head(const char* str="red.head")
{
cout<<"head's color is.\t"<<str<<endl;
}
void setcolor_Body(const char* str="blue.body")
{
cout<<"body's color is.\t"<<str<<endl;
}
void setcolor_Foot(const char* str="black.foot")
{
cout<<"foot's color is.\t"<<str<<endl;
}
private:
char* color;
//Head head;Body body;Foot foot;
};

第二种产品,也是包括三个部件

class productSecond
{
public:
void setcolor_Head(const char* str)
{
cout<<"head's color is.\t"<<str<<endl;
}
void setcolor_Body(const char* str)
{
cout<<"body's color is.\t"<<str<<endl;
}
void setcolor_Foot(const char* str)
{
cout<<"foot's color is.\t"<<str<<endl;
}
private:
//Head head;Body body;Foot foot;
};

组装类direct类

class direct
{
public:
void construct(builder* b)
{
b->buildpartHead();
b->buildpartBody();
b->buildpartFoot();
cout<<"making all parts together......\n"<<endl;
}
};

客户端的使用

builder_Kindtwo* pf = new builder_Kindtwo();
direct d;
d.construct(pf);
productSecond* f = pf->GetProduct();

一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:

通俗讲解:Builder模式的理解
简单地说,就好象我要一座房子住,可是我不知道怎么盖 (简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高), 于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙, 这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工 要,记住了!
就象国内好多企业上erp一样,上erp,首先得找软件公司呀,找到软件公司后,软件公司说,我只知道怎么写软件,就知道怎 么实现,不清楚整个erp的流程。好,那我们还得找一个咨询公司,好,找到德勤了,德勤说好,我要软件怎么做,软件公司怎么做,我就能保证软件能为你们提 供erp系统了。此模式是为了让设计和施工解耦,互不干扰。

对象创建型模式------Builder(生成器)的更多相关文章

  1. 对象创建型模式------Builder(生成器或建造者模式)(2)

    链接转自:http://blog.csdn.net/wuzhekai1985/article/details/6667467 主要思想是:首先有个指挥家思想者将大体的设计思路设计出来,然后寻找一部分工 ...

  2. 设计模式(3)-对象创建型模式-Abstract Factory模式

    1.对象创建型模式 1.3           Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: •  一个系统要独立于它的产品的创建. ...

  3. 设计模式(4)-对象创建型模式-Prototype模式

    1.对象创建型模式 1.4          Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 •P r o t o t y p e(Gr a p h i c) - ...

  4. Builder(生成器)-对象创建型模式

    一.意图 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. 二.动机 一个复杂的对象的构造过程中,原料相同,可能会要求生产不同的产品,并且生产的产品种类还能够方便的增加.Bu ...

  5. singleton(单件)-对象创建型模式

    1.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2.动机 对一些类来说,只有一个实例是很重要的.让类自身负责保存它唯一的实例,这个类可以保证没有其他实例可以被创建(通过截取创建新对象 ...

  6. 设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)

    意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 • 一个系统要独立于它的产品的创建.组合和表示时. • 一 ...

  7. Singleton模式——对象创建型模式

    Singleton模式即为单例模式/单件模式. (一)意图--保证一个类仅有一个实例,并提供一个访问它的全局访问点. 如一台计算机可以有多个端口,但是应该统一管理这些端口,避免访问冲突.--选择Sin ...

  8. ProtoType(原型)-对象创建型模式

    1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.动机 通过拷贝或者“克隆”一个类的实例来创建新的实例. 3.适用性 当一个系统应该独立于它的产品创建.构成和表示时,要使 ...

  9. 创建型模式——Builder

    1.意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.结构 3.参与者 Builder为创建一个Product对象的各个部件指定抽象接口 ConcreteBuild ...

随机推荐

  1. poj1743--Musical Theme(后缀数组)

    题意:求一列数字中走向相同的两个字序列,长度要求大于5 题解:相邻数字求差,原题就变成求相同的长度大于4的子串. [存疑:在保证两个子串不相交时觉得限定条件应该是大于x,但是wa了= = 不是很理解] ...

  2. 问题-Delphi 中使用TStringList后,报out of memory 的解决方法

    问题现象: 请一段开发个项目 程序调试全部通过但测试时出现个问题 “out of memory” 在长时间运行时!后来终于解决 :很简单其实就是object.create时对象没有释放. 代码如下: ...

  3. poj 3250 Bad Hair Day【栈】

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15922   Accepted: 5374 Des ...

  4. [OC Foundation框架 - 22] 集合的内存管理

    A.集合的手动内存管理 NSArray addObject: 加入的元素执行一次retain removeObject: 被删除的元素执行一次release removeAllObjects: 所有元 ...

  5. Keil uCos 2.52 stm32 【worldsing笔记】

    1.uCOSii V2.52    a.加了7个可以配置的钩子函数宏     #define OS_TASK_CREATE_HOOK_EN    0    /* 任务创建时调用钩子函数      使能 ...

  6. SQL Server 2008数据库创建,备份,还原图解及注意点

    一.新建数据库 步骤1:点击“新建数据库”. 步骤2:输入数据库名称,设置数据库文件保存位置(注意点:最好自己设置数据库文件保存位置,不要采用安装时默认的文件保存位置!),点击“确认”即可完成新库的创 ...

  7. SQLite使用教程11 表达式

    SQLite 表达式 表达式是一个或多个值.运算符和计算值的SQL函数的组合. SQL 表达式与公式类似,都写在查询语言中.您还可以使用特定的数据集来查询数据库. 语法 假设 SELECT 语句的基本 ...

  8. 【不积跬步,无以致千里】mysql 多行合并函数

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. 【Android开发】完美解决Android完全退出程序

    背景:假说有两个Activity, Activity1和Activity2, 1跳转到2,如果要在2退出程序,一般网上比较常见的说法是用 System.exit(0) 或是 android.os.Pr ...

  10. [置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811 场景类CCScene和布景类CCLayer都是作为一个容器来使 ...