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

QtC++ 设计模式(四)——策略模式

策略模式

  • 序言
  • 理解
  • 源码

序言

还是参考的菜鸟教程,会C++的还是看C++的方式来得舒服。

.

理解

使用符合UML规范的便于理解和回忆,接口其实就是普通的基类
策略模式
.

源码

strategy.h

/// 策略
class Strategy
{
public:virtual ~Strategy();/*** @brief 计算* @param num1 计算数值* @param num2 被计算数值* @return */virtual int operation(const int& num1, const int& num2) = 0;
};/// 加策略
class AddOperation : public Strategy
{
public:/*** @brief 加计算* @param num1 计算数值* @param num2 被计算数值* @return */int operation(const int &num1, const int &num2) override;
};/// 减策略
class SubtractOperation : public Strategy
{
public:/*** @brief 减计算* @param num1 计算数值* @param num2 被计算数值* @return */int operation(const int &num1, const int &num2) override;
};/// 上下文
class Context
{
public:/*** @brief 构造一个策略的上下文* @param strategy 策略对象*/explicit Context(Strategy *strategy);~Context();/*** @brief 计算* @param num1 计算数值* @param num2 被计算数值* @return */int operation(const int &num1, const int &num2);private:/// 所拥有的策略Strategy *strategy = nullptr;
};

.
strategy.cpp

Strategy::~Strategy()
{}int AddOperation::operation(const int &num1, const int &num2)
{return num1 + num2;
}int SubtractOperation::operation(const int &num1, const int &num2)
{return num1 - num2;
}Context::Context(Strategy *strategy): strategy(strategy)
{}Context::~Context()
{if (strategy)delete strategy;
}int Context::operation(const int &num1, const int &num2)
{if (strategy){return strategy->operation(num1, num2);}return INT_MIN;
}

.
使用的地方

std::shared_ptr< Context > context(new Context(new AddOperation));
std::cout << context->operation(10, 5) << std::endl;context.reset(new Context(new SubtractOperation));
std::cout << context->operation(10, 5) << std::endl;

不同策略则生成不同的对象给Context,Context会根据其拥有的策略进行运算。

http://www.lryc.cn/news/143557.html

相关文章:

  • LVS集群和分布式概念
  • javafx应用程序线程异常Exception in thread “JavaFx Application Thread“
  • 大漠插件7.2336
  • 5年测试,面试结束后被HR发朋友圈怼了..(心塞)
  • 基于相空间重构的混沌背景下微弱信号检测算法matlab仿真,对比SVM,PSO-SVM以及GA-PSO-SVM
  • 开发者必备:推荐将闲置iPad Pro打造为编程工具,使用VS Code编写代码
  • c++,标准库std中全局函数 _Destroy_in_place(...)的分析
  • java:Tomcat
  • US-P2F-R-C双线圈插头式比例阀放大器
  • clickhouse一次异常排查记录
  • Python 数据可视化:玩转 Matplotlib 的散点图、线形图、饼图和热力图
  • 基于python+pyqt实现opencv银行卡身份证等识别
  • 惠普台式机装系统记录
  • java八股文面试[JVM]——垃圾回收
  • iOS开发Swift-控制流
  • leetcode875. 爱吃香蕉的珂珂(java)
  • LeetCode-406-根据身高重建队列
  • JVM——类加载与字节码技术—编译期处理+类加载阶段
  • C#|如何调试进依赖动态库中
  • 全新版本QStack云管系统3.5.3 附详细安装教程
  • SLB 负载均衡
  • 多核调度预备知识
  • 什么是Git?解释Git的分布式版本控制系统的优势?
  • 软考高级系统架构设计师系列论文九十五:图书馆网络应用体系安全设计
  • qt 实现音视频的分贝检测系统
  • SSM框架和Spring Boot+Mybatis框架的性能比较?
  • 6个月的测试,来面试居然要18K,我一问连8K都不值
  • 优美而高效:解决服务器通信问题
  • C++模板的模板参数(五)
  • 基于jeecg-boot的flowable流程加签功能实现