• 设计模式:策略模式(C++实现)


    策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列的算法,并将每个算法封装成独立的对象,使得它们可以互相替换。下面是一个使用C++实现策略模式的示例:

    #include 
    
    // 抽象策略类
    class Strategy
    {
    public:
        virtual void execute() = 0;
    };
    
    // 具体策略类1
    class ConcreteStrategy1 : public Strategy
    {
    public:
        void execute() override
        {
            std::cout << "Executing Concrete Strategy 1" << std::endl;
        }
    };
    
    // 具体策略类2
    class ConcreteStrategy2 : public Strategy
    {
    public:
        void execute() override
        {
            std::cout << "Executing Concrete Strategy 2" << std::endl;
        }
    };
    
    // 上下文类
    class Context
    {
    private:
        Strategy *strategy;
    
    public:
        Context(Strategy *strategy) : strategy(strategy) {}
        void setStrategy(Strategy *strategy)
        {
            this->strategy = strategy;
        }
        void executeStrategy()
        {
            strategy->execute();
        }
    };
    
    int main()
    {
        Strategy *strategy1 = new ConcreteStrategy1();
        Strategy *strategy2 = new ConcreteStrategy2();
        Context context(strategy1);
        context.executeStrategy(); // 输出 "Executing Concrete Strategy 1"
        context.setStrategy(strategy2);
        context.executeStrategy(); // 输出 "Executing Concrete Strategy 2"
        delete strategy1;
        delete strategy2;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    运行结果:

    Executing Concrete Strategy 1
    Executing Concrete Strategy 2
    
    • 1
    • 2

    在上述示例中,我们首先定义了一个抽象策略类 Strategy,其中包含一个纯虚函数 execute()。然后,我们创建了两个具体策略类 ConcreteStrategy1 和 ConcreteStrategy2,它们分别实现了 execute() 函数。
    接下来,我们定义了上下文类 Context,其中包含一个私有成员 strategy,用于保存当前的策略对象。Context 类中的 setStrategy() 函数用于设置当前策略,executeStrategy() 函数用于调用当前策略的 execute() 函数。
    在 main() 函数中,我们首先创建了两个具体策略对象 strategy1 和 strategy2,然后创建了一个 Context 对象 context,并将 strategy1 设置为当前策略,最后调用 executeStrategy() 函数,输出的是 “Executing Concrete Strategy 1”。接着,我们将 strategy2 设置为当前策略,并再次调用 executeStrategy() 函数,输出的是 “Executing Concrete Strategy 2”。
    这样,我们就实现了一个简单的策略模式。通过将算法封装成具体策略对象,并在上下文类中动态设置当前策略,我们可以根据需要切换不同的算法实现。这种方式使得算法的变化独立于使用算法的客户端,提高了代码的灵活性和可维护性。

  • 相关阅读:
    【Elasticsearch专栏 14】深入探索:Elasticsearch使用Logstash的日期过滤器删除旧数据
    Drools规则属性,高级语法
    全波形反演的深度学习方法: 第 4 章 基于正演的 FWI (草稿)
    CI/CD:安装配置Gitlab Runner
    linux后台执行命令:nohup
    万字详解 | Java 流式编程
    串口中断与环形队列——高级应用
    音视频数字化(数字与模拟-电影)
    大事务导致数据库恢复时间长
    计网第四章(网络层)(九)
  • 原文地址:https://blog.csdn.net/wydxry/article/details/133177252