大龙的博客
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2012年12月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
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
留言簿
(43)
给我留言
查看公开留言
查看私人留言
收藏夹
ps
(rss)
随笔档案
2014年10月 (1)
2014年8月 (4)
2014年6月 (1)
2013年12月 (6)
2013年11月 (2)
2013年10月 (5)
2013年9月 (4)
2013年7月 (1)
2013年6月 (2)
2013年3月 (1)
2013年2月 (20)
2013年1月 (10)
2012年12月 (8)
2012年11月 (5)
2012年10月 (9)
2012年9月 (4)
2012年8月 (16)
2012年7月 (8)
2012年6月 (10)
2012年5月 (11)
2012年4月 (3)
2012年3月 (10)
2012年2月 (6)
2012年1月 (4)
2011年12月 (6)
2011年11月 (16)
2011年10月 (32)
2011年9月 (13)
2011年8月 (6)
2011年7月 (27)
2011年6月 (18)
2011年5月 (12)
2011年4月 (2)
2011年3月 (1)
2011年2月 (5)
2011年1月 (24)
2010年12月 (5)
2010年11月 (2)
2010年10月 (3)
2010年9月 (4)
2010年8月 (7)
2010年6月 (13)
2010年5月 (18)
2010年4月 (21)
2010年3月 (6)
2010年2月 (7)
2010年1月 (7)
2009年12月 (7)
2009年11月 (2)
2009年10月 (8)
2009年9月 (19)
2009年8月 (11)
2009年6月 (28)
2009年5月 (35)
2009年4月 (18)
2009年3月 (24)
2009年2月 (13)
2009年1月 (10)
2008年12月 (2)
2008年11月 (6)
2008年10月 (4)
2008年9月 (11)
2008年8月 (18)
2008年7月 (8)
2008年6月 (19)
2008年5月 (9)
2008年4月 (6)
2008年3月 (2)
2008年2月 (4)
2008年1月 (21)
2007年12月 (14)
2007年11月 (4)
2007年10月 (7)
2007年9月 (17)
2007年8月 (10)
2007年7月 (20)
2007年6月 (11)
2007年5月 (8)
2007年4月 (13)
2007年3月 (2)
2007年2月 (6)
2007年1月 (14)
2006年12月 (23)
2006年11月 (15)
2006年10月 (5)
2006年9月 (4)
文章档案
2007年11月 (1)
2006年12月 (1)
阅读排行榜
1. LinuxShell算术运算(49297)
2. Windows XP DDK 的有效下载地址(45079)
3. WinDBG教程(40913)
4. Android 打包签名 从生成keystore到完成签名 -- 转(40646)
5. 在Cygwin上安装编辑器vim (38977)
评论排行榜
1. Windows XP DDK 的有效下载地址(116)
2. 在Cygwin上安装编辑器vim (24)
3. (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议 ---------- 转(14)
4. Compuware DriverStudio V3.2(10)
5. 经典好书 (10)
常用链接
我的随笔
我的评论
我参与的随笔
统计
随笔 - 864
文章 - 2
评论 - 378
引用 - 0
最新评论
1. re: 安装Nexus私服
谢谢博主。我刚学搭建nexus,挺不错的。
--做有为青年
2. re: 用slf4j+logback实现多功能日志解决方案 --- 转
谢谢楼主,整个流程非常清楚,照着做了一遍就会了。另外我分享一个logback目前尚存在的bug:当你发现INFO级和ERROR级的日志没有写成功时,上下移动一下配置文件中appender的位置就好了。
--welldone
3. re: LinuxShell算术运算
你这些都验证过吗
--是是是
4. re: 用slf4j+logback实现多功能日志解决方案 --- 转
写的非常好!
--Hello
5. re: (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议 ---------- 转
评论内容较长,点击标题查看
--pcplayer
常见设计模式的解析和实现(C++)之十六-Strategy模式
作用:
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.
UML结构图:
解析:
简而言之一句话,Strategy模式是对算法的封装.处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了.
实现:
1)Strategy.h
/**/
/*
*******************************************************************
created: 2006/08/06
filename: Strategy.h
author: 李创
http://www.cppblog.com/converse/
purpose: Strategy模式的演示代码
********************************************************************
*/
#ifndef STRATEGY_H
#define
STRATEGY_H
class
Strategy;
class
Context
{
public
:
Context(Strategy
*
pStrategy);
~
Context();
void
ContextInterface();
private
:
Strategy
*
m_pStrategy;
}
;
class
Strategy
{
public
:
virtual
~
Strategy()
{}
virtual
void
AlgorithmInterface()
=
0
;
}
;
class
ConcreateStrategyA
:
public
Strategy
{
public
:
virtual
~
ConcreateStrategyA()
{}
virtual
void
AlgorithmInterface();
}
;
#endif
2)Strategy.cpp
/**/
/*
*******************************************************************
created: 2006/08/06
filename: Strategy.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: Strategy模式的演示代码
********************************************************************
*/
#include
<
iostream
>
#include
"
Strategy.h
"
Context::Context(Strategy
*
pStrategy)
: m_pStrategy(pStrategy)
{
}
Context::
~
Context()
{
delete m_pStrategy;
m_pStrategy
=
NULL;
}
void
Context::ContextInterface()
{
if
(NULL
!=
m_pStrategy)
{
m_pStrategy
->
AlgorithmInterface();
}
}
void
ConcreateStrategyA::AlgorithmInterface()
{
std::cout
<<
"
AlgorithmInterface Implemented by ConcreateStrategyA\n
"
;
}
3)Main.cpp
/**/
/*
*******************************************************************
created: 2006/08/06
filename: Main.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: Strategy模式的测试代码
********************************************************************
*/
#include
"
Strategy.h
"
int
main()
{
Strategy
*
pStrategy
=
new
ConcreateStrategyA();
Context
*
pContext
=
new
Context(pStrategy);
pContext
->
ContextInterface();
delete pContext;
return
0
;
}
本文来源:http://www.cppblog.com/converse/archive/2006/08/06/10899.aspx
posted on 2006-09-22 18:17
大龙
阅读(193)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 大龙