在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` 类的代码)。