21-策略模式(Strategy)

21-策略模式(Strategy)

陆欣溢 2024-11-20 测评 536 次浏览 0个评论

策略模式是一种行为型设计模式。它定义一系列的算法,将它们封装起来,并允许它们相互替换。这种设计模式使得算法可独立于使用它的客户而变化,从而实现代码的灵活性和可扩展性。

21-策略模式(Strategy)

策略模式结构图

#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;
}
21-策略模式(Strategy)

策略模式运行结果

  1. 当许多相关的类仅仅是行为有差异时,可以使用“策略”来配置一个类。
  2. 当需要使用一个算法的不同变体时,可以使用策略模式。例如,可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
  3. 当一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现时,可以使用策略模式。将相关的条件分支移入它们各自的策略类中以代替这些条件语句,可以提高代码的可读性和可维护性。
 林诗栋说总决赛自己特别想打好  法院回应女生遭两男子性侵后身亡  杨仕泽祝绪丹互曝对方微醺状态  情侣亲密时酒店房间遭两男子闯入  许幻山下桌胡成上桌  中国人在巴黎开荒种菜获市长特批  孙颖莎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请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!
Top