策略模式C++实现
2024-08-30 04:58:18
#include <iostream>
using namespace std;
class Strategy;
class Context {
public:
Context(Strategy* pStrategy);
virtual ~Context();
virtual void algorithm();
private:
Strategy* m_pStrategy;
};
class Strategy {
public:
Strategy() {}
virtual ~Strategy() {}
virtual void algorithm() = 0;
};
class ConcreteStrategyA : public Strategy {
public:
ConcreteStrategyA() {}
virtual ~ConcreteStrategyA() {}
virtual void algorithm();
};
class ConcreteStrategyB : public Strategy {
public:
ConcreteStrategyB() {}
virtual ~ConcreteStrategyB() {}
virtual void algorithm();
};
// Context
Context::Context(Strategy* pStrategy) {
m_pStrategy = pStrategy;
}
Context::~Context() {
if (!m_pStrategy) delete m_pStrategy;
}
void Context::algorithm() {
m_pStrategy->algorithm();
}
// ConcreteStrategyA
void ConcreteStrategyA::algorithm() {
cout << "I'm ConcreteStrategyA's algorithm" << endl;
}
// ConcreteStrategyB
void ConcreteStrategyB::algorithm() {
cout << "I'm ConcreteStrategyB's algorithm" << endl;
}
int main() {
Strategy* pStrategy = new ConcreteStrategyA();
Context* pContext = new Context(pStrategy);
(*pContext).algorithm();
pStrategy = new ConcreteStrategyB();
pContext = new Context(pStrategy);
(*pContext).algorithm();
return 0;
}
最新文章
- 在Vi里面实现字符串的批量替换
- MySQL使用二进制日志恢复数据库
- shenben语录
- PowerDesigner 15.1 安装步骤详细图解及破解
- SQL语句基础知识
- HTTP基础:URL格式、 HTTP请求、响应、消息
- 有向图的欧拉路径POJ2337
- 矩形嵌套(LIS)
- 快速傅里叶变换(FFT)算法【详解】
- 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法
- 浅论Python密文输入密码的方法
- rpc接口调用以太坊智能合约
- 【用户权限】MongoDB用户权限
- stark组件的分页,模糊查询,批量删除
- 创建dblink
- [Big Data - Codis] Codis集群的搭建与使用
- windows media player 官方修复工具下载及修复方法
- WebStorm新创建项目介绍
- Android App解决卡顿慢之内存抖动及内存泄漏(发现和定位)
- 【android】 adb logcat命令查看并过滤android输出log
热门文章
- 用asp.net core结合fastdfs打造分布式文件存储系统
- centos7下端口映射
- Display a QMessageBox from a QThread
- Spring Boot devtool的使用
- dlopen failed: empty/missing DT_HASH in "libx.so" (built with --hash-style=gnu?)
- 在sun jdk 8镜像基础上构建maven 3的docker镜像
- CentOS 7 网络优化(升级内核、开启 BBR)
- codeforce 1311 D. Three Integers
- linux下编译boost的多线程程序
- 【Python】Django2.0集成Celery4.1详解