设计模式——策略模式

策略模式是一种行为型设计模式,通过封装算法到独立的类中实现算法的替换。它提高代码灵活性,遵循开闭原则,减少条件语句。本文以C++为例详细介绍了策略模式的结构和使用方法。
摘要由CSDN通过智能技术生成

策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到一个独立的类中,使得它们可以相互替换。策略模式可以使得算法的变化独立于使用算法的客户端。
策略模式通过定义一系列算法,使得它们可以相互替换,而不影响使用算法的客户端。策略模式将每个算法封装到一个独立的类中,客户端根据需要选择合适的算法进行使用。

  • 抽象策略类(Strategy): 定义了一个算法族的抽象,通常是一个接口或者抽象类。
  • 具体策略类(Concrete Strategy): 实现了抽象策略类定义的算法,具体策略类之间是可以相互替换的。
  • 上下文类(Context): 持有一个策略对象,并将请求委托给策略对象来执行具体的算法。

特点:

增加灵活性: 策略模式使得算法可以独立于客户端而变化,客户端可以根据需要选择合适的策略。
遵循开闭原则: 策略模式遵循开闭原则,可以方便地添加新的策略类而不需要修改客户端代码。
减少条件语句: 策略模式将算法封装到独立的类中,减少了条件语句,提高了代码的可读性和可维护性。

下面是一个简单的C++策略模式的示例:

#include <iostream>

// 抽象策略类
class Strategy {
public:
    virtual ~Strategy() {}
    virtual void algorithm() const = 0;
};

// 具体策略类 A
class ConcreteStrategyA : public Strategy {
public:
    void algorithm() const override {
        std::cout << "Using strategy A" << std::endl;
    }
};

// 具体策略类 B
class ConcreteStrategyB : public Strategy {
public:
    void algorithm() const override {
        std::cout << "Using strategy B" << std::endl;
    }
};

// 上下文类
class Context {
public:
    Context(Strategy* strategy) : strategy(strategy) {}

    void setStrategy(Strategy* strategy) {
        this->strategy = strategy;
    }

    void executeStrategy() const {
        if (strategy != nullptr) {
            strategy->algorithm();
        }
    }

private:
    Strategy* strategy;
};

int main() {
    // 创建具体策略对象
    ConcreteStrategyA strategyA;
    ConcreteStrategyB strategyB;

    // 创建上下文对象,并设置具体策略对象
    Context context(&strategyA);
    
    // 执行策略
    context.executeStrategy(); // 输出:Using strategy A

    // 切换策略
    context.setStrategy(&strategyB);
    
    // 执行策略
    context.executeStrategy(); // 输出:Using strategy B

    return 0;
}

在这个例子中,Strategy 是抽象策略类,定义了一个纯虚函数 algorithm(),表示具体策略类需要实现的算法。ConcreteStrategyA 和 ConcreteStrategyB 是具体策略类,分别实现了不同的算法。Context 是上下文类,持有一个策略对象,并在需要时调用具体策略对象的算法。在客户端中,我们创建了具体策略对象,并将其传递给上下文对象,然后调用上下文对象的方法来执行具体的算法。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值