当前位置: 首页 > news >正文

c++策略模式(Strategy Method)

 

别人的博客再讲策略模式时都会讲三国,策略类就是赵云的锦囊,锦囊里装着若干妙计。在打仗时想要用什么妙计,直接从锦囊里去取。

锦囊类:

class context
{
public:
	context(IStrategy *isstrategy);
	~context();
	void Operate(void);
private:
	IStrategy *m_strategy;
	
};
context::context(IStrategy *isstrategy):m_strategy(isstrategy)
{
}
context::~context()
{
}
void context::Operate(void)
{
    m_strategy->Operate();
}

妙计的接口:

class IStrategy
{
public:
	IStrategy(void){};
	virtual ~IStrategy(void){};
	virtual void Operate(void) = 0;
};

走后门妙计:

class BackDoor:public IStrategy
{
public:
    BackDoor(void);
    ~BackDoor(void);
    void Operate(void);
};
BackDoor::BackDoor(void)
{
}
BackDoor::~BackDoor(void)
{
}
void BackDoor::Operate(void)
{
    std::cout <<"走后门了!" <<std::endl;
}

开绿灯妙计:

class GreenLight:public IStrategy
{
public:
    GreenLight(void);
    ~GreenLight(void);
    void Operate(void);
};
GreenLight::GreenLight(void)
{

}
GreenLight::~GreenLight(void)
{

}
void GreenLight::Operate(void)
{
    std::cout << "开绿灯了!" << std::endl;
}

主函数:

int main()
{
    std::cout << "#1策略"<<std::endl;
    context*context1 =  new context(new BackDoor());
    context1->Operate();

    std::cout << "#2策略"<<std::endl;
    context*context2 =  new context(new GreenLight());
    context2->Operate();

    getchar(); 
    return 0;
}

运行结果:

#1策略
走后门了!
#2策略
开绿灯了!

 

---恢复内容结束---

相关文章:

  • Data Domain和Avamar到底有什么不同呢?
  • pl/sql programming 03 语言基础
  • 【mysql基础】mysql学习笔记-2-存储引擎
  • 如何形成高端战力
  • java acm输入输出
  • Exchange210中的Rpc Client Access server属性
  • mysql5.5 主从复制 (触发器,函数,存储引擎,事件处理)说明
  • jstack dump日志文件详解
  • list模块
  • vim 光标按行移动
  • Exchange2010跨林迁移邮箱(3)
  • 叨叨PS那些活
  • 合法的用户名
  • Mysql 索引 (转)
  • ListView项目长按的菜单功能总结
  • Google 是如何开发 Web 框架的
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【Linux系统编程】快速查找errno错误码信息
  • E-HPC支持多队列管理和自动伸缩
  • Elasticsearch 参考指南(升级前重新索引)
  • go语言学习初探(一)
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • React+TypeScript入门
  • Spring Boot MyBatis配置多种数据库
  • 阿里云前端周刊 - 第 26 期
  • 服务器从安装到部署全过程(二)
  • 服务器之间,相同帐号,实现免密钥登录
  • 聊聊flink的TableFactory
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 运行时添加log4j2的appender
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云服务器如何修改远程端口?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​secrets --- 生成管理密码的安全随机数​
  • #pragma once与条件编译
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (九)c52学习之旅-定时器
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core中的去虚
  • .net framework profiles /.net framework 配置
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET学习全景图
  • .NET中 MVC 工厂模式浅析
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C++][数据结构][算法]单链式结构的深拷贝