定义一系列的算法,并将每个算法封装起来,并且使它们之间可以交换
优点:
- 结构清晰
- 耦合度降低
缺点:
- 随着策略的增加,子类也会变得繁多,带来额外开销
- 对客户端暴露所有的策略,有悖于迪米特法则
- Context —— 用来操作策略的上下文
- Strategy(SortStrategy) —— 策略的抽象
- BubbleSort、QuickSort、SelectSort —— 具体的策略实现
public interface SortStrategy {
void sort();
}
public class BubbleSort implements SortStrategy {
@Override
public void sort() {
System.out.println("Bubble Sort");
}
}
public class QuickSort implements SortStrategy {
@Override
public void sort() {
System.out.println("Quick Sort");
}
}
public class SelectSort implements SortStrategy {
@Override
public void sort() {
System.out.println("Select Sort");
}
}
public class Context {
private SortStrategy strategy;
public void setStrategy(SortStrategy strategy) {
this.strategy = strategy;
}
public void execute() {
strategy.sort();
}
}
public class StrategyTest {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new BubbleSort());
context.execute();
// 输出:Bubble Sort
}
}