蜗牛的家
男儿当自强
C++博客
首页
新文章
新随笔
聚合
管理
posts - 48, comments - 21, trackbacks - 0
C++设计模式-TemplateMethod
意图:
定义一个操作中的算法的骨架,而将这些具体骤延的实现迟到子类中.
UML图:
解析:
TemplateMethod的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类,但是这样也造成设计灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较困难
适用:
一次性实现一个算法的不变的部分,并将可以变的行为留给子类来实现
各子类中公共的行为应被取出来并集中到一个公共父类中以避免代码重复,首先识别现有代码中的不同之处,并且将有不同之处分离为新的操作,最后,用一个调用这些新的操作的模板方法来替换这些不同的代码
控制子类扩展,模板方法只在特定点调用HOOK操作,这样就只允许在这些点进行扩展
#include
"
stdafx.h
"
#include
<
iostream
>
using
namespace
std;
/**/
////////////////////////////////////////////////////////////////////////
//
class
AbstractClass
{
public
:
AbstractClass()
{}
virtual
~
AbstractClass()
{}
//
这个函数定义了算法轮廓
void
TempplateMethod();
protected
:
virtual
void
PrimitiveOperation1()
=
0
;
//
算法中具体依赖的函数在子类中实现
virtual
void
PrimitiveOperation2()
=
0
;
}
;
class
ConCreateClass :
public
AbstractClass
{
public
:
ConCreateClass()
{}
virtual
~
ConCreateClass()
{}
protected
:
virtual
void
PrimitiveOperation1();
virtual
void
PrimitiveOperation2();
}
;
void
ConCreateClass::PrimitiveOperation1()
{
cout
<<
"
PrimitiveOperation1 by ConCreateClass\n
"
;
}
void
ConCreateClass::PrimitiveOperation2()
{
cout
<<
"
PrimitiveOperation2 by ConCreateClass\n
"
;
}
void
AbstractClass::TempplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
/**/
////////////////////////////////////////////////////////////////////////
//
int
_tmain(
int
argc,
char
*
argv[])
{
AbstractClass
*
pConCreatetClass
=
new
ConCreateClass;
pConCreatetClass
->
TempplateMethod();
delete pConCreatetClass;
system(
"
pause
"
);
return
0
;
}
posted on 2008-08-19 22:54
黑色天使
阅读(226)
评论(0)
编辑
收藏
引用
所属分类:
设计模式
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
decorator模式
MVC模式理解——当年给我一个browser多好(转)
C++设计模式-趣解
C++设计模式-visitor
C++设计模式-Memento
C++模式-Iterator
C++设计模式-Observer
C++设计模式-Command
C++模式-FlyWeight
C++设计模式-ChainOfResponsibility
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2024年11月
>
日
一
二
三
四
五
六
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
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(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(转)(6632)
2. YUV格式详细解释与FFMPEG的关系(4284)
3. 如何检测内存泄漏(转)(3880)
4. memcpy的BUG(2694)
5. CHttpDownLoad Beta 1.0(2314)
评论排行榜
1. CHttpDownLoad Beta 1.0(10)
2. memcpy的BUG(5)
3. 事件模型SOCKET封装(2)
4. 键盘过滤驱动源代码(2)
5. C++设计模式-Observer(1)