Java设计模式之《策略模式》

目录

1、策略介绍

2、特点

2.1、优缺点

2.2、和工厂模式对比

3、实现


前言


1、策略介绍

策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换使用。

如下所示:

策略模式使得算法可以独立于使用它的客户端而变化。


2、特点

2.1、优缺点

1、策略模式优点:

策略类之间可以自由切换:

由于策略类都实现同一个接口,所以使它们之间可以自由切换。避免使用多重条件选择语句(if else),充分体现面向对象设计思想。

易于扩展:

增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合"开闭原则"。

2、策略模式缺点:

客户端必须知道所有的策略类,并自行决定使用哪一个策略类,策略模式将造成产生很多策略类。

2.2、和工厂模式对比

如下所示:


3、实现

下面是策略模式的一个简单实现示例:

假设我们有一个计算器应用程序,可以执行不同的运算策略(例如加法、减法、乘法、除法)。我们可以使用策略模式来实现这些运算。

1、定义策略接口

java 复制代码
public interface OperationStrategy {
    int execute(int a, int b);
}

2、实现具体策略

java 复制代码
public class AdditionStrategy implements OperationStrategy {
    @Override
    public int execute(int a, int b) {
        return a + b;
    }
}

public class SubtractionStrategy implements OperationStrategy {
    @Override
    public int execute(int a, int b) {
        return a - b;
    }
}

public class MultiplicationStrategy implements OperationStrategy {
    @Override
    public int execute(int a, int b) {
        return a * b;
    }
}

public class DivisionStrategy implements OperationStrategy {
    @Override
    public int execute(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("Cannot divide by zero");
        }
        return a / b;
    }
}

3、使用策略上下文

java 复制代码
public class CalculatorContext {
    private OperationStrategy strategy;

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

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

4、客户端代码

java 复制代码
public class StrategyPatternDemo {
    public static void main(String[] args) {
        CalculatorContext calculator = new CalculatorContext();

        calculator.setStrategy(new AdditionStrategy());
        System.out.println("Addition: " + calculator.executeStrategy(5, 3));

        calculator.setStrategy(new SubtractionStrategy());
        System.out.println("Subtraction: " + calculator.executeStrategy(5, 3));

        calculator.setStrategy(new MultiplicationStrategy());
        System.out.println("Multiplication: " + calculator.executeStrategy(5, 3));

        calculator.setStrategy(new DivisionStrategy());
        System.out.println("Division: " + calculator.executeStrategy(6, 3));
    }
}

总结

策略模式通过将算法封装在独立的策略类中,实现了算法的解耦和动态选择。它提高了代码的灵活性和可维护性,特别是在需要频繁切换或扩展算法的场景中。


参考文章:

1、策略模式适用场景与具体实例解析_策略模式应用场景-CSDN博客文章浏览阅读1.4k次,点赞5次,收藏8次。策略模式在多种场合下都能发挥其优势,尤其在需要根据不同条件或策略选择不同算法的场景中。下面是几个具体的适用场景及其对应的实例,以帮助进一步理解策略模式的实际应用。_策略模式应用场景https://blog.csdn.net/h356363/article/details/140408049?ops_request_misc=%257B%2522request%255Fid%2522%253A%25224c78c5b6a3ccda22d9db323028f3b03c%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=4c78c5b6a3ccda22d9db323028f3b03c&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-140408049-null-null.142^v102^control&utm_term=%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8&spm=1018.2226.3001.4187

相关推荐
山东点狮信息科技有限公司7 小时前
企业级 MES 制造执行系统架构设计与实践
spring cloud·性能优化·系统架构·策略模式·点狮
JAVA面经实录9177 小时前
操作系统(面试全覆盖)
java·计算机网络·面试
编程的一拳超人8 小时前
Maven 国内高速镜像推荐(按速度排序)
java·maven
云烟成雨TD8 小时前
Spring AI 1.x 系列【61】Spring AI 2.0 升级指南
java·人工智能·spring
lulu12165440789 小时前
OpenRouter Fusion 多模型融合架构深度拆解:预算级模型组团打平 Fable 5,多模型协作才是 AGI 的正确打开方式?
java·人工智能·架构·ai编程·agi
雨辰AI9 小时前
生产级实测:SpringBoot3 + 达梦数据库接口从 200ms 优化至 20ms 完整调优指南
java·数据库·spring boot·后端·政务
(Charon)10 小时前
【C++ 面试高频:内存管理、RAII 和智能指针详解】
java·开发语言·word
凡人叶枫10 小时前
Effective C++ 条款39:明智而审慎地使用 private 继承
java·数据库·c++·嵌入式开发
zzqssliu10 小时前
基于策略模式与责任链的代购商品多源采集架构实战
架构·策略模式