设计模式-策略模式(Strategy Pattern)

1. 概念

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,将每一个算法封装起来,并使它们可以互换。策略模式让算法独立于使用它的客户端独立变化。

2. 优点

  1. 灵活性:可以在运行时选择具体的策略,方便扩展和修改。
  2. 减少条件语句:将复杂的条件判断逻辑转化为策略类,简化代码结构。
  3. 提高可维护性:每个策略类都可以独立维护,符合单一职责原则。

3. 缺点

  1. 增加类的数量:每个策略都需要一个独立的类,可能导致类的数量增加。
  2. 客户端必须了解所有策略:客户端需要了解所有可用的策略,可能增加复杂性。

4. 组成部分

  • 具体策略类(ConcreteStrategy):实现策略接口的具体算法。
  • 上下文(Context):持有一个策略类的引用,并可以在运行时切换策略。

5. 使用场景

  • 当一个类需要在多个算法之间进行选择时。
  • 当算法的变化独立于使用算法的客户时。
  • 需要使用不同的算法来处理同一问题时。

6. 代码示例

策略接口

public interface Strategy {
    int execute(int a, int b);
}

具体策略类

public class AddStrategy implements Strategy {
    @Override
    public int execute(int a, int b) {
        return a + b;
    }
}
public class SubtractStrategy implements Strategy {
    @Override
    public int execute(int a, int b) {
        return a - b;
    }
}

上下文

public class Context {

    private Strategy strategy;

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int a, int b) {
        return strategy.execute(a, b);
    }
}

测试使用

public class Test {

    public static void main(String[] args) {
        Context context = new Context();

        // 使用加法策略
        context.setStrategy(new AddStrategy());
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        // 使用减法策略
        context.setStrategy(new SubtractStrategy());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
    }
}

在这里插入图片描述

7. 总结

策略模式通过将算法封装在独立的策略类中,使得算法可以在运行时动态切换,增强了系统的灵活性和可维护性。虽然可能会增加类的数量,但在需要多种算法选择的场景下,策略模式是一个非常有效的解决方案。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值