java实现策略模式使用示例


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

以下是一个简单的策略模式使用示例,我们将实现一个简单的排序策略,包括快速排序和冒泡排序两种策略。

首先,定义一个排序策略的接口:


public interface SortStrategy {
    void sort(int[] array);
}

然后,实现具体的排序策略:


public class QuickSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] array) {
        // 这里只是示意,实际应实现快速排序算法
        System.out.println("Applying Quick Sort");
        // 假设这里进行了快速排序
    }
}

public class BubbleSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] array) {
        // 这里只是示意,实际应实现冒泡排序算法
        System.out.println("Applying Bubble Sort");
        // 假设这里进行了冒泡排序
    }
}

接下来,定义一个上下文(Context)类,该类接受客户的请求,并维护一个对策略对象的引用。这个上下文类允许客户在运行时动态地改变策略:


public class SortContext {
    private SortStrategy strategy;

    public SortContext(SortStrategy strategy) {
        this.strategy = strategy;
    }

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

    public void executeSort(int[] array) {
        strategy.sort(array);
    }
}

最后,客户端代码可以如下编写,以演示如何使用策略模式:


public class StrategyPatternDemo {
    public static void main(String[] args) {
        int[] numbers = {5, 2, 9, 1, 5, 6, 3, 7};

        SortContext context = new SortContext(new QuickSortStrategy());
        context.executeSort(numbers);

        // 假设我们想要改变排序策略
        context.setStrategy(new BubbleSortStrategy());
        context.executeSort(numbers);
    }
}

在这个示例中,`SortContext` 类是上下文类,它维护了对 `SortStrategy` 接口的引用。客户端可以根据需要,通过调用 `setStrategy` 方法来更改排序策略。这样,算法的变化(即排序策略的变化)就不会影响到使用这些算法的客户(即 `SortContext` 类和 `StrategyPatternDemo` 类的代码)。