周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • Spring
  • SpringMVC
  • Mybatis
  • Docker
  • 设计模式
  • 安装教程
  • 其他教程
  • 基础
  • 虚拟化
  • OpenStack
  • 心情杂货
关于
收藏

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • Spring
  • SpringMVC
  • Mybatis
  • Docker
  • 设计模式
  • 安装教程
  • 其他教程
  • 基础
  • 虚拟化
  • OpenStack
  • 心情杂货
关于
收藏
  • Spring

  • SpringMVC

  • Mybatis

  • Docker

  • 设计模式

    • 策略模式
      • 策略模式
        • 案例一
  • 安装教程

  • 其他教程

  • 后端
  • 设计模式
周振林
2026-01-30
目录

策略模式

# 策略模式

策略模式是行为型设计模式,核心是将算法/业务策略封装为独立的策略类,使策略可灵活替换、扩展,且策略的变化不影响使用策略的客户端,遵循开闭原则和单一职责原则。 核心角色(4 个)
抽象策略(Strategy):定义策略的公共接口 / 抽象类,声明核心执行方法(如doOperation()),约束所有具体策略的行为。
具体策略(ConcreteStrategy):实现抽象策略接口,封装具体的算法 / 业务逻辑(如策略 A、策略 B),可按需新增。
环境 / 上下文(Context):持有抽象策略的引用,提供给客户端调用的入口,负责策略的切换和执行,不直接实现业务逻辑。
客户端(Client):根据需求选择具体的策略,注入到上下文对象中,调用上下文的执行方法完成业务。

# 案例一

  1. 抽象策略(Strategy)
// 抽象计算策略
public interface CalculateStrategy {
    int calculate(int a, int b); // 核心执行方法
}
1
2
3
4
  1. 具体策略(ConcreteStrategy)
// 具体策略:加法
public class AddStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}
1
2
3
4
5
6
7
// 具体策略:减法
public class SubtractStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a - b;
    }
}
1
2
3
4
5
6
7
  1. 上下文(Context)
// 上下文:持有策略引用,提供执行入口
public class CalculateContext {
    // 抽象策略引用(核心:面向抽象编程)
    private CalculateStrategy strategy;

    // 注入策略(客户端设置,支持动态切换)
    public void setStrategy(CalculateStrategy strategy) {
        this.strategy = strategy;
    }

    // 客户端调用的统一入口
    public int executeCalculate(int a, int b) {
        return strategy.calculate(a, b);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  1. 客户端(Client)
// 客户端:选择并使用策略
public class Client {
    public static void main(String[] args) {
        CalculateContext context = new CalculateContext();
        int a = 10, b = 5;

        // 选择加法策略
        context.setStrategy(new AddStrategy());
        System.out.println(a + " + " + b + " = " + context.executeCalculate(a, b)); // 15

        // 动态切换为减法策略
        context.setStrategy(new SubtractStrategy());
        System.out.println(a + " - " + b + " = " + context.executeCalculate(a, b)); // 5
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Last Updated: 2026/01/30, 11:41:22
Docker运行JAR
开发环境配置

← Docker运行JAR 开发环境配置→

最近更新
01
SpringBoot枚举处理
01-29
02
查询优化N+1
12-02
03
项目代码组织方式
12-02
更多文章>
Copyright © 2019-2026 鲁ICP备19032096号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×