设计模式-策略模式

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 04:00 点击:

// strategy.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
/********************************************************************
created: 2011/08/15
created: 15:8:2011   10:37
file base: strategy
file ext: cpp
author: lost boy
purpose: 设计模式-策略模式
策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,
对外的接口一样,只是各自实现上存在差异。用策略模式来封装算法,效果比较好。
*********************************************************************/
/*
电脑战术
*/
class BotsTactics
{
public:
virtual void DoTactics() = 0;
};
/*
吹风流
*/
class TacticsBlown : public BotsTactics
{
public:
void DoTactics()
{
printf("bot use Blown tactics\n");
}
};
/*
熊流
*/
class TacticsBears : public BotsTactics
{
public:
void DoTactics()
{
printf("bot use Bears tactics\n");
}
};
/*
塔流
*/
class TacticsTowerRush : public BotsTactics
{
public:
void DoTactics()
{
printf("bot use TowerRush tactics\n");
}
};
/*
也是直接通过参数指定,只不过不是传入指针,而是一个标签。
用户只需要知道标签
*/
enum TATICS {BLOWN, BEAR, TR}; //标签 
class Bots
{
private:
BotsTactics *pTatics_;
public:
Bots(enum TATICS ta)
{
if (ta == BLOWN)
pTatics_ = new TacticsBlown;
else if(ta == BEAR)
pTatics_ = new TacticsBears;
else if (ta == TR)
pTatics_ = new TacticsTowerRush;
else
pTatics_ = NULL;
}
~Bots()
{
if (pTatics_)
{
delete pTatics_;
pTatics_ = NULL;
}
};
public:
void DoTactics()
{
pTatics_->DoTactics();
}
};
/*
利用模板实现。算法通过模板的实参指定。
*/
template<class ta>
class templateBots
{
private:
ta ta_;
public:
templateBots(){}
~templateBots(){}
public:
void DoTactics()
{
ta_.DoTactics();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Bots bot(BLOWN);
bot.DoTactics();
templateBots<TacticsTowerRush> bot1;
bot1.DoTactics();
return 0;
}
 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 浅析.NET下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • C#高级编程:数据库连接[1]
    • asp.net 设置GridView的选中行的实现代码
    • 经典C++程序1
    • IIS 自动回收导致后台定时器失效的问题解决
    • ASP.NET&#160;GridView列表代码示例
    • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1