蜗牛的家
男儿当自强
C++博客
首页
新文章
新随笔
聚合
管理
posts - 48, comments - 21, trackbacks - 0
C++设计模式-Builder
意图:
将一个复杂的对象的构建与他的表示分离,使得相同的构建过程可以构建出不同的表示
适用:
当创建对象的算法应该独立于该对象的的组成部分以及他们的装配方式时
当
相同的构造过程
允许构造对象的不同表示时
UML图:
//
test.h
/**/
////////////////////////////////////////////////////////////////////////
//
//
虚拟基类,是所有Builder的基类,提供共同的构建各部分接口函数
class
Builder
{
public
:
Builder()
{}
virtual
~
Builder()
{}
virtual
void
BuilderPartA()
=
0
;
virtual
void
BuilderPartB()
=
0
;
}
;
//
通用的构建产品的基类,根据不同的Builder构建不同的产品
class
Director
{
public
:
Director(Builder
*
pBuilder);
~
Director();
void
Construct();
private
:
Builder
*
m_pBuilder;
}
;
//
产品类,继承自产品基类,并完成各个部分构建的函数
class
ConCreateBuilder1 :
public
Builder
{
public
:
ConCreateBuilder1()
{}
virtual
~
ConCreateBuilder1()
{}
virtual
void
BuilderPartA();
virtual
void
BuilderPartB();
}
;
class
ConCreateBuilder2 :
public
Builder
{
public
:
ConCreateBuilder2()
{}
virtual
~
ConCreateBuilder2()
{}
virtual
void
BuilderPartA();
virtual
void
BuilderPartB();
}
;
//
test.cpp : Defines the entry point for the console application.
//
#include
"
stdafx.h
"
#include
<
iostream
>
#include
"
stdlib.h
"
#include
"
test.h
"
using
namespace
std;
/**/
////////////////////////////////////////////////////////////////////////
//
Director::Director(Builder
*
pBuilder) : m_pBuilder(pBuilder)
{
}
Director::
~
Director()
{
delete m_pBuilder;
m_pBuilder
=
NULL;
}
void
ConCreateBuilder1::BuilderPartA()
{
cout
<<
"
BuilderPartA by ConCreateBuilder1\n
"
;
}
void
ConCreateBuilder1::BuilderPartB()
{
cout
<<
"
BuilderPartB by ConCreateBuilder1\n
"
;
}
void
ConCreateBuilder2::BuilderPartA()
{
cout
<<
"
BuilderPartA by ConCreateBuilder2\n
"
;
}
void
ConCreateBuilder2::BuilderPartB()
{
cout
<<
"
BuilderPartB by ConCreateBuilder2\n
"
;
}
//
通用的构建过程,根据不同的Bulider构建出不同的实例
void
Director::Construct()
{
m_pBuilder
->
BuilderPartA();
m_pBuilder
->
BuilderPartB();
}
/**/
////////////////////////////////////////////////////////////////////////
//
int
main(
int
argc,
char
*
argv[])
{
Builder
*
pBuilder1
=
new
ConCreateBuilder1;
Director
*
pDirector
=
new
Director(pBuilder1);
pDirector
->
Construct();
Builder
*
pBuilder2
=
new
ConCreateBuilder2;
Director
*
pDirector2
=
new
Director(pBuilder2);
pDirector2
->
Construct();
delete pDirector;
delete pDirector2;
system(
"
pause
"
);
return
0
;
}
posted on 2008-08-16 17:44
黑色天使
阅读(302)
评论(0)
编辑
收藏
引用
所属分类:
设计模式
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
decorator模式
MVC模式理解——当年给我一个browser多好(转)
C++设计模式-趣解
C++设计模式-visitor
C++设计模式-Memento
C++模式-Iterator
C++设计模式-Observer
C++设计模式-Command
C++模式-FlyWeight
C++设计模式-ChainOfResponsibility
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2008年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
C\C++(8)
Hacker(1)
STL
VC&MFC(4)
操作系统(1)
多进程&多线程
流媒体开发
内存管理技术(2)
软件工程(1)
设计模式(20)
数据结构&算法(2)
网络开发(3)
随笔档案
2011年4月 (1)
2011年3月 (2)
2009年7月 (1)
2009年6月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (3)
2008年12月 (5)
2008年11月 (1)
2008年10月 (3)
2008年9月 (3)
2008年8月 (23)
文章档案
2011年3月 (1)
2009年6月 (1)
2008年11月 (1)
搜索
最新评论
1. re: C++设计模式-Observer
评论内容较长,点击标题查看
--no7dw
2. re: YUV格式详细解释与FFMPEG的关系
评论内容较长,点击标题查看
--windsome
3. re: 键盘过滤驱动源代码
@soul
再怎么懒也应该自己实现一部分吧
--黑色天使
4. re: 键盘过滤驱动源代码[未登录]
再怎么懒也该加上unload例程吧
--soul
5. re: CHttpDownLoad Beta 1.0
评论内容较长,点击标题查看
--tangxinfa
阅读排行榜
1. RGB、YUY2、YUYV、YVYU、UYVY与AYUV(转)(6640)
2. YUV格式详细解释与FFMPEG的关系(4285)
3. 如何检测内存泄漏(转)(3883)
4. memcpy的BUG(2697)
5. 内存池技术学习笔记(2322)
评论排行榜
1. CHttpDownLoad Beta 1.0(10)
2. memcpy的BUG(5)
3. 事件模型SOCKET封装(2)
4. 键盘过滤驱动源代码(2)
5. C++设计模式-Observer(1)