策略模式的基本定义是什么?
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,同时使它们可以相互替换。策略模式可以使算法可独立于使用它的客户端变化。
策略模式的主要目标是提供一种方法,使得客户端可以选择在运行时选择不同的算法或策略。
策略模式主要包含以下三种角色:
- Context(上下文):这是使用策略的类,也是我们的客户端。它维护一个对策略对象的引用。
- Strategy(策略):这是一个接口,它定义了每个策略或算法必须有的方法。
- ConcreteStrategy(具体策略):这是实现 Strategy 接口的类,它提供了具体的算法实现。
下面是一个简单的 Java 代码示例:
// 策略接口
interface SortingStrategy {
void sort(int[] numbers);
}
// 具体策略A
class QuickSortStrategy implements SortingStrategy {
public void sort(int[] numbers) {
// 实现快速排序
}
}
// 具体策略B
class BubbleSortStrategy implements SortingStrategy {
public void sort(int[] numbers) {
// 实现冒泡排序
}
}
// 上下文
class Sorter {
private SortingStrategy strategy;
public Sorter(SortingStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(SortingStrategy strategy) {
this.strategy = strategy;
}
public void sort(int[] numbers) {
strategy.sort(numbers);
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
int[] numbers = {4, 2, 3, 1};
Sorter sorter = new Sorter(new QuickSortStrategy());
sorter.sort(numbers); // 使用快速排序
sorter.setStrategy(new BubbleSortStrategy());
sorter.sort(numbers); // 使用冒泡排序
}
}
在这个例子中,Sorter
是我们的上下文,SortingStrategy
是策略接口,QuickSortStrategy
和 BubbleSortStrategy
是具体策略。客户端代码创建了一个 Sorter
对象,并可以在运行时选择使用哪种排序策略。
策略模式通常在需要动态、透明地替换算法,或者在不同条件下使用不同策略时使用。例如,你可能会在一个导航应用中使用策略模式,根据用户的偏好或当前的交通状况选择不同的路线规划算法。