策略模式是一种行为型设计模式。它定义一系列的算法,将它们封装起来,并允许它们相互替换。这种设计模式使得算法可独立于使用它的客户而变化,从而实现代码的灵活性和可扩展性。
#include <iostream>
#include <list>
#include <memory>
#include <string>
class Strategy {
public:
using Ptr = std::shared_ptr<Strategy>;
Strategy() {}
virtual ~Strategy() {}
virtual void AlgorithmInterface() = 0;
};
class Context {
public:
Context(Strategy* strategy) : _strategy(strategy) {}
virtual ~Context() {}
void ContextInterface() {
if (_strategy) {
_strategy->AlgorithmInterface();
}
}
void ChangeStrategy(Strategy* strategy) {
_strategy = strategy;
}
protected:
Strategy* _strategy;
};
class ConcreteStrategyA : public Strategy {
public:
ConcreteStrategyA() {}
virtual ~ConcreteStrategyA() {}
void AlgorithmInterface() override {
std::cout << "Strategy A" << std::endl;
}
};
class ConcreteStrategyB : public Strategy {
public:
ConcreteStrategyB() {}
virtual ~ConcreteStrategyB() {}
void AlgorithmInterface() override {
std::cout << "Strategy B" << std::endl;
}
};
int main(int argc, char* argv[]) {
Strategy::Ptr strategyA = std::make_shared<ConcreteStrategyA>();
Context ctx(strategyA.get());
ctx.ContextInterface();
Strategy::Ptr strategyB = std::make_shared<ConcreteStrategyB>();
// 改变策略
ctx.ChangeStrategy(strategyB.get());
ctx.ContextInterface();
return 0;
}
- 当许多相关的类仅仅是行为有差异时,可以使用“策略”来配置一个类。
- 当需要使用一个算法的不同变体时,可以使用策略模式。例如,可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
- 当一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现时,可以使用策略模式。将相关的条件分支移入它们各自的策略类中以代替这些条件语句,可以提高代码的可读性和可维护性。
林诗栋说总决赛自己特别想打好 法院回应女生遭两男子性侵后身亡 杨仕泽祝绪丹互曝对方微醺状态 情侣亲密时酒店房间遭两男子闯入 许幻山下桌胡成上桌 中国人在巴黎开荒种菜获市长特批 孙颖莎vs陈幸同 新驻乌克兰大使马升琨抵达乌克兰履新 戴景耀想做一回顶流 高三女生被灌醉后遭强奸致死 男子从湖南划皮艇到上海半路艇丢了 林诗栋3:1A勒布伦 留几手想和葛夕住只是想有人洗衣服 A股午评:创业板指跌0.27% RIIZE获MAMA最佳男子全球表演奖 俄称乌远程武器背后有北约技术支持 陈都灵走这两步够我学一辈子 大V:乌军在4个重镇大势已去 孟子义西部牛仔风 情侣入住酒店遭陌生人开门闯入 丁禹兮这组出圈图居然没修 中国男篮今晚迎战关岛队 papi酱理解李行亮为什么发癫了 跳槽后才发现前公司有多离谱 华为官宣Mate X6 俄专家:特朗普无法撼动俄中关系 搞钱色权色交易 王昊被“双开” 官方通报游客在大牯牛山纵火烧山 南北入冬美食大赏 王曼昱3比1申裕斌 晋级8强 孙颖莎遭遇一轮游后满脸不甘心 永夜星河爱一人先爱自己 为什么韩国人热衷于喝冰美式 林栋哲头发是王安宇在冰岛剪的 拜登回应ICC对以总理发出逮捕令 马夫儿子回应父亲猥亵女驴友 王楚钦晋级男单8强 乌镇的黑科技含量好高 女子分手拿走孩子出生证致无法入学 车位“缩水”4毫米 业主索赔 八角笼中制片人力挺王宝强 小雪雪满天 来年必丰年 SNH48王奕周诗雨双人变装挑战 高校老师撞脸雷军 媒体:让躺平式干部站起来干起来 上班暂停邓超陪你摸鱼 医生建议别疯抢医用卫生巾 Doran加入T1后首播 87版红楼梦“鸳鸯”扮演者郑铮去世 阿斯利康CEO大量买入自家股票
转载请注明来自广州玛斯顿影音有限公司,本文标题:《21-策略模式(Strategy) 》
百度分享代码,如果开启HTTPS请参考李洋个人博客