对象创建型模式------Builder(生成器)
本文系转载,转载地址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(生成器)的更多相关文章
- 对象创建型模式------Builder(生成器或建造者模式)(2)
链接转自:http://blog.csdn.net/wuzhekai1985/article/details/6667467 主要思想是:首先有个指挥家思想者将大体的设计思路设计出来,然后寻找一部分工 ...
- 设计模式(3)-对象创建型模式-Abstract Factory模式
1.对象创建型模式 1.3 Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: • 一个系统要独立于它的产品的创建. ...
- 设计模式(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) - ...
- Builder(生成器)-对象创建型模式
一.意图 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. 二.动机 一个复杂的对象的构造过程中,原料相同,可能会要求生产不同的产品,并且生产的产品种类还能够方便的增加.Bu ...
- singleton(单件)-对象创建型模式
1.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2.动机 对一些类来说,只有一个实例是很重要的.让类自身负责保存它唯一的实例,这个类可以保证没有其他实例可以被创建(通过截取创建新对象 ...
- 设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)
意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 • 一个系统要独立于它的产品的创建.组合和表示时. • 一 ...
- Singleton模式——对象创建型模式
Singleton模式即为单例模式/单件模式. (一)意图--保证一个类仅有一个实例,并提供一个访问它的全局访问点. 如一台计算机可以有多个端口,但是应该统一管理这些端口,避免访问冲突.--选择Sin ...
- ProtoType(原型)-对象创建型模式
1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.动机 通过拷贝或者“克隆”一个类的实例来创建新的实例. 3.适用性 当一个系统应该独立于它的产品创建.构成和表示时,要使 ...
- 创建型模式——Builder
1.意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.结构 3.参与者 Builder为创建一个Product对象的各个部件指定抽象接口 ConcreteBuild ...
随机推荐
- [学姿势]使用AngularJS+CodeIgniter框架经验谈
这篇文章作为总结总结7月份参与项目时遇到的新东西和问题,包括这两个框架(CodeIgniter.AngularJS)以及两个功能实现.有前端调试显示动态认证,也有用php实现功能模块. 1.添加设备 ...
- Android问题-selection contains a component,button7,introduced in an ancestor and cannot be deleted.
问题现象: 在开发Android时增加的控件想删除,可是删除时提示“Android问题-selection contains a component,button7,introduced in an ...
- sublime Text 3的默认快捷键大全
Ctrl+M 光标跳至对应的括号 Alt+. 闭合当前标签 Ctrl+Shift+A 选择光标位置父标签对儿 Ctrl+Shift+[ 折叠代码 Ctrl+Shift+] 展开代码 Ctrl+KT 折 ...
- Java多线程——Semaphore信号灯
Semaphore可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数(即允许n个任务同时访问这个资源),例如,实现一个文件允许的并发访问数. Sem ...
- oracle强制使用索引
select /*+ INDEX(表名,索引名称) */ col_1,...from xxx
- 理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- Why Does Everyone Else Appear to Be Succeeding?
Why Does Everyone Else Appear to Be Succeeding? —Steven G. Krantz When you are a student, it will a ...
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...
- Linux内核之内存管理(4)--缺页处理程序
本文主要解说缺页处理程序,凝视足够具体,不再解释. //以下函数将一页内存页面映射到指定线性地址处,它返回页面的物理地址 //把一物理内存页面映射到线性地址空间指定处或者说把线性地址空间指定地址add ...
- C#-获取datatable指定列的数据
DataTable dt = new DataTable(); da.Fill(dt); this.text ...