【设计模式】策略模式

概念

行为模式


类图


代码

cpp 复制代码
#include <iostream>

using namespace std;

class Strategy {
public:
    ~Strategy() = default;
    virtual int Execute(int a, int b) = 0;
};

class ConcreteStrategyAdd : public Strategy {
    int Execute(int a, int b) override {
        return a + b;
    }
};

class ConcreteStrategySubtract : public Strategy {
    int Execute(int a, int b) override {
        return a - b;
    }
};

class ConcreteStrategyMultiply : public Strategy {
    int Execute(int a, int b) override {
        return a * b;
    }
};

class Context {
public:
    void SetStrategy(Strategy* s) {
        strategy = s;
    }

    int ExecuteStrategy(int a, int b) {
        return strategy->Execute(a, b);
    }

private:
    Strategy* strategy;
};

int main(int argc, char *argv[]) {
    auto context = new Context();
    int a = 10, b = 25;

    string action = "add";
    if (action == "add") {
        context->SetStrategy(new ConcreteStrategyAdd());
    } else if (action == "subtraction") {
        context->SetStrategy(new ConcreteStrategySubtract());
    } else if (action == "multiplication") {
        context->SetStrategy(new ConcreteStrategyMultiply());
    } else {
        cout << "Wops! Error Action." << endl;
        return -1;
    }

    cout << context->ExecuteStrategy(a, b) << endl;

    delete context;

    return 0;
}
相关推荐
syt_101312 小时前
设计模式之-代理模式
设计模式·代理模式
拾忆,想起13 小时前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现
老朱佩琪!15 小时前
Unity桥接模式
unity·设计模式·c#·桥接模式
小明的小名叫小明15 小时前
Solidity入门(10)-智能合约设计模式1
设计模式·区块链·智能合约
小明的小名叫小明15 小时前
Solidity入门(11)-智能合约设计模式2
设计模式·区块链·智能合约
__万波__15 小时前
二十三种设计模式(十四)--命令模式
java·设计模式·命令模式
程序员zgh15 小时前
C++常用设计模式
c语言·数据结构·c++·设计模式
不爱吃糖的程序媛16 小时前
解决鸿蒙PC命令行编译 macOS 上 cp 命令参数冲突问题
macos·harmonyos·策略模式
山风wind16 小时前
设计模式-模板方法模式详解
python·设计模式·模板方法模式