魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 策略模式

文章摘要: 策略模式使用总结。

简介

简要说明

  • 策略模式(Strategy Pattern)是一种行为型设计模式。
  • 允许在运行时选择不同的算法行为,通过将算法封装在独立的类中,并在运行时根据需要切换这些算法。

主要功能

  • 定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。
  • 允许算法的变化独立于使用算法的客户。
  • 允许客户端从算法中解耦,算法可以独立于客户端变化。

注意事项

  • 客户端必须知道所有的策略类,并能够决定使用哪一个策略类。
  • 策略模式造成很多策略类,每个具体策略类都会产生一个新类。
  • 所有的策略类都需要对外暴露出一个公共接口,较高的抽象水平可能会导致具体实现策略时的一些限制。

适用场景

  • 当一个系统需要在几种算法中动态选择一种时。
  • 当一个对象有很多的行为,并且这些行为在这个对象的类中会以多个条件语句的形式出现时。
  • 当算法使用的数据从外部传入时,策略模式可以避免暴露复杂的、与算法相关的数据结构。

Java 8

案例

// 策略接口,定义所有支持的算法的公共操作
interface Strategy {
    int doOperation(int num1, int num2);
}

// 具体策略类,实现了策略接口
class OperationAdd implements Strategy {
    // 加法算法
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

class OperationSubtract implements Strategy {
    // 减法算法
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

class OperationMultiply implements Strategy {
    // 乘法算法
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}

// 上下文类,使用某种策略
class Context {
    private Strategy strategy;

    // 设置策略
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    // 执行策略
    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

// 客户端代码,使用策略模式
public class StrategyPatternDemo {
    public static void main(String[] args) {
        Context context = new Context();

        // 设置加法策略
        context.setStrategy(new OperationAdd());
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        // 设置减法策略
        context.setStrategy(new OperationSubtract());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        // 设置乘法策略
        context.setStrategy(new OperationMultiply());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}

注释

  • 在这个例子中,Strategy接口定义了一个方法doOperation,它将由具体的策略类实现。OperationAdd、OperationSubtract和OperationMultiply是三个具体的策略类,它们分别实现了加法、减法和乘法算法。
  • Context类是上下文类,它持有一个策略对象,并提供了一个设置策略的方法setStrategy和执行策略的方法executeStrategy。
  • 客户端代码StrategyPatternDemo创建了Context对象,并通过调用setStrategy方法来设置不同的策略。然后,它调用executeStrategy方法来执行所选的策略,并打印结果。通过这种方式,客户端可以在运行时动态地改变算法行为。
更新时间: 2025/10/3 17:56