那谁的技术博客
感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 201, 文章 - 0, 评论 - 794, 引用 - 0
数据加载中……
常见设计模式的解析和实现(C++)之十一-TemplateMethod模式
作用:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML结构图:
抽象基类:
1)AbstractClass:抽象基类,定义算法的轮廓
解析:
TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.
实现:
1)TemplateMethod.h
/**/
/*
*******************************************************************
created: 2006/07/20
filename: TemplateMethod.h
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的演示代码
********************************************************************
*/
//
抽象基类,定义算法的轮廓
class
AbstractClass
{
public
:
AbstractClass()
{}
virtual
~
AbstractClass()
{}
//
这个函数中定义了算法的轮廓
void
TemplateMethod();
protected
:
//
纯虚函数,由派生类实现之
virtual
void
PrimitiveOperation1()
=
0
;
virtual
void
PrimitiveOperation2()
=
0
;
}
;
//
继承自AbstractClass,实现算法
class
ConcreateClass
:
public
AbstractClass
{
public
:
ConcreateClass()
{}
virtual
~
ConcreateClass()
{}
protected
:
virtual
void
PrimitiveOperation1();
virtual
void
PrimitiveOperation2();
}
;
2)TemplateMethod.cpp
/**/
/*
*******************************************************************
created: 2006/07/20
filename: TemplateMethod.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的演示代码
********************************************************************
*/
#include
"
TemplateMethod.h
"
#include
<
iostream
>
void
AbstractClass::TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
void
ConcreateClass::PrimitiveOperation1()
{
std::cout
<<
"
PrimitiveOperation1 by ConcreateClass\n
"
;
}
void
ConcreateClass::PrimitiveOperation2()
{
std::cout
<<
"
PrimitiveOperation2 by ConcreateClass\n
"
;
}
3)Main.cpp
/**/
/*
*******************************************************************
created: 2006/07/20
filename: Main.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的测试代码
********************************************************************
*/
#include
"
TemplateMethod.h
"
#include
<
stdlib.h
>
int
main()
{
AbstractClass
*
pConcreateClass
=
new
ConcreateClass;
pConcreateClass
->
TemplateMethod();
delete pConcreateClass;
system(
"
pause
"
);
return
0
;
}
posted on 2006-07-27 23:06
那谁
阅读(840)
评论(2)
编辑
收藏
引用
所属分类:
设计模式
评论
#
re: 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式
回复
更多评论
继承型的行为模式
和STL算法模板 + functor思想相似
不过一个编译时静态、一个运行时动态
2006-07-28 09:46 |
Arcrest
#
re: 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式
回复
更多评论
楼主写的 这个系列 很好啊 ,我要好好学习了
@Arcrest
2007-03-23 09:24 |
waitng
刷新评论列表
IT新闻:
·
微型隐身斗篷问世:大物件隐形尚需时日
·
2月份全球社交网站人均停留时间5.5小时
·
美航天飞机最后飞行任务曝光 9月全退役
·
分析称社交网站定位功能存在巨大商机
·
大型强子对撞机创能级新纪录 将揭宇宙起源
专题:
Android
iPad
jQuery
Chrome OS
博客园首页
IT新闻
知识库
学英语
C++程序员招聘
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
推荐职位:
·
飞信服务器端高级.NET开发工程师(新媒传信)
·
.NET飞信官网开发工程师(新媒传信)
·
.NET技术开发总监(广州衣酷)
·
ASP.NET资深工程师 (盛大网络)
·
.NET初级程序员 (北京安人)
·
.NET中级程序员 (北京安人)
·
中高级.NET工程师(沪江网)
·
前端开发工程师(沪江网)
博客园首页随笔:
·
关于更松散开放的数据结构的意淫
·
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
·
谷歌或下周一宣布退出中国 撤离日期4月10日
·
javascript上传组件
·
D3D学习总结渲染篇(一)--基础理论
知识库:
·
有感于“研发人员的个人培养和组织培养”
·
SQL vs NoSQL:数据库并发写入性能比拼
·
让敏捷与“以用户为中心的设计”和谐共生
·
Apple、Google 之战渐显个人色彩
·
闾丘露薇:参观两间“小”公司
相关文章:
服务器公共库开发--线程安全的singleton类, 可配置的线程锁管理类
常见设计模式的解析和实现(C++)文档及源码打包下载
常见设计模式的解析和实现(C++)之二十一-完结篇
常见设计模式的解析和实现(C++)之二十-Visitor模式
常见设计模式的解析和实现(C++)之十九-Memento模式
常见设计模式的解析和实现(C++)之十八-Iterator模式
常见设计模式的解析和实现(C++)之十七-State模式
常见设计模式的解析和实现(C++)之十六-Strategy模式
常见设计模式的解析和实现(C++)之十五-Observer模式
常见设计模式的解析和实现(C++)之十四-Command模式
网站导航:
博客园
IT新闻
博客园个人主页
BlogJava
博客生活
IT博客网
PHP博客
博客园社区
管理
Powered by:
C++博客
Copyright © 那谁
导航
C++博客
首页
联系
聚合
管理
<
2010年3月
>
日
一
二
三
四
五
六
28
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
7
8
9
10
公告
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(55)
给我留言
查看公开留言
查看私人留言
随笔分类
(253)
C\C++(18)
(rss)
ccache(8)
(rss)
CGL(5)
(rss)
gdb(2)
(rss)
libevent(2)
(rss)
lighttpd(10)
(rss)
linux kernel(7)
(rss)
Linux/Unix(32)
(rss)
memcached(2)
(rss)
mktags(4)
(rss)
Nginx(5)
(rss)
Perl(3)
(rss)
tokyo cabinet(5)
(rss)
操作系统(1)
(rss)
读书笔记(3)
(rss)
服务器设计(42)
(rss)
脚本语言(1)
(rss)
经验教训(1)
(rss)
其他(7)
(rss)
设计模式(24)
(rss)
算法与数据结构(48)
(rss)
图形学(1)
(rss)
网络编程(22)
(rss)
随笔档案
(201)
2010年3月 (1)
2010年1月 (5)
2009年12月 (7)
2009年11月 (3)
2009年10月 (7)
2009年9月 (2)
2009年8月 (2)
2009年7月 (1)
2009年6月 (3)
2009年5月 (2)
2009年4月 (7)
2009年3月 (2)
2009年2月 (2)
2009年1月 (5)
2008年12月 (1)
2008年11月 (2)
2008年10月 (6)
2008年9月 (12)
2008年8月 (11)
2008年7月 (5)
2008年6月 (2)
2008年4月 (3)
2008年3月 (3)
2008年2月 (1)
2008年1月 (1)
2007年12月 (3)
2007年11月 (3)
2007年8月 (1)
2007年7月 (2)
2007年6月 (2)
2007年5月 (9)
2007年4月 (1)
2007年3月 (8)
2007年2月 (3)
2007年1月 (5)
2006年12月 (4)
2006年11月 (3)
2006年10月 (5)
2006年9月 (4)
2006年8月 (13)
2006年7月 (28)
2006年4月 (1)
2006年3月 (4)
2006年2月 (4)
2006年1月 (1)
2005年12月 (1)
相册
ccache
lighttpd
tokyo cabinet
文件
关于我
我的google reader share
我的google reader share
开源项目
libevent
lighttpd
memcached
PCRE for Windows (Win32)
sqlite
STLFilt
论坛
ChinaUnix
OldLinux
朋友
cugb_cat
Edengundam
win_hate
ypxing
老罗
搜索
最新评论
1. re: lighttpd1.4.18代码分析(五)--处理超时连接
评论内容较长,点击标题查看
--hcykernel
2. re: 常见设计模式的解析和实现(C++)文档及源码打包下载
thanks.:)
--linSG
3. re: memcached采用的网络模型
@小阳
你的理解是正确的.
--那谁
4. re: memcached采用的网络模型
另外。。这个其实和unp上的多个父子进程一起accept很相似。。只是你接受连接做了个简单的分配。。前者是内核来唤醒的accept..我记得那个大侠说过。。现在Linux貌似已经解决惊群现象了。。。
--小阳
5. re: memcached采用的网络模型
这个模型。。只能处理各个连接间没有数据交互的情况。。不晓得是不。。请指正
--小阳
阅读排行榜
1. epoll学习笔记(13329)
2. 常见设计模式的解析和实现(C++)文档及源码打包下载(8178)
3. libevent事件处理框架分析(7819)
4. 同步/异步与阻塞/非阻塞的区别(5429)
5. epoll为什么这么快(5300)
6. epoll相关资料整理(5056)
7. Lighty与Nginx的比较分析(4919)
8. 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)(4776)
9. Linux下面的线程锁,条件变量以及信号量的使用(4758)
10. [算法]红黑树的实现代码(修订版)(4635)
11. 二分查找算法(迭代和递归版本)(4501)
12. 让libevent支持多线程(4443)
13. 第一个socket程序-C\S模式的文件传输程序(4414)
14. 使用tolua++创建基于C\C++语言的lua脚本(4341)
15. 红黑树的实现源码(第二次修订版)(4312)
16. 程序设计经验总结(4239)
17. 多进程服务器中,epoll的创建应该在创建子进程之后(3959)
18. 我的项目Makefile文件模板(3800)
19. 自己设想的一个IM服务器的架构(3693)
20. 从半同步-半异步模式谈服务器的设计(3662)
21. 使用gdb跟踪C语言中变长数组的实现(3586)
22. P2P原理的解释与实现(3582)
23. lighttpd1.4.18代码分析(一)--watcher,worker模型(3563)
24. 研究了一下SGI STL的内存算法(3537)
25. 自己设想的一个IM服务器的架构(续一)(3431)
26. 自己实现的memcpy(3398)
27. [数据结构]红黑树的实现源码(3369)
28. (C++)一个愚蠢的错误(3293)
29. 探索C++的秘密之一详解extern "C"(3272)
30. 发布我的开源cache库ccache(3263)
31. Nginx0.7.61代码分析(一)--写在前面的话以及进程模型分析(3258)
32. AVL树的实现代码(3224)
33. 二分查找学习札记(3135)
评论排行榜
1. 常见设计模式的解析和实现(C++)文档及源码打包下载(65)