引言

在软件开发中,策略模式是一种常用的设计模式,它允许在运行时选择算法的行为。这种模式特别适用于有多个算法实现且需要根据不同情况选择使用哪个算法的场景。本文将介绍如何在Java中使用策略模式,并通过设置默认策略来简化算法选择过程。

策略模式概述

策略模式是一种行为设计模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式的主要目的是将算法的实现与使用算法的客户解耦。

策略模式实现

以下是一个简单的策略模式实现,包括一个策略接口、两个具体策略实现和一个上下文类。

1. 策略接口

public interface Strategy {
    int calculate(int num1, int num2);
}

2. 具体策略实现

public class AddStrategy implements Strategy {
    @Override
    public int calculate(int num1, int num2) {
        return num1 + num2;
    }
}

public class SubtractStrategy implements Strategy {
    @Override
    public int calculate(int num1, int num2) {
        return num1 - num2;
    }
}

3. 上下文类

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

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

    public int executeStrategy(int num1, int num2) {
        return strategy.calculate(num1, num2);
    }
}

设置默认策略

在实际应用中,我们可能需要为某些情况设置默认策略。以下是如何在Context类中实现默认策略:

public class Context {
    private Strategy strategy;

    public Context() {
        this.strategy = new AddStrategy(); // 默认策略为加法
    }

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

    public int executeStrategy(int num1, int num2) {
        return strategy.calculate(num1, num2);
    }
}

现在,当创建Context对象时,默认策略为加法。如果需要使用其他策略,可以调用setStrategy方法进行设置。

示例

以下是一个使用策略模式的示例:

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

        // 使用默认策略(加法)
        System.out.println("Default Strategy: " + context.executeStrategy(10, 5));

        // 设置策略为减法
        context.setStrategy(new SubtractStrategy());
        System.out.println("Subtract Strategy: " + context.executeStrategy(10, 5));
    }
}

输出结果:

Default Strategy: 15
Subtract Strategy: 5

总结

通过使用策略模式,我们可以轻松地实现多种算法选择,并通过设置默认策略来简化算法选择过程。在Java中,策略模式是一种非常实用的设计模式,可以帮助我们更好地管理算法的变更和扩展。