策略模式是一种行为设计模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式特点
- 开闭原则:策略模式符合开闭原则,因为算法的修改不会影响到使用算法的客户。
- 替换原则:策略模式允许算法的变化独立于使用算法的客户。
- 封装原则:策略模式将算法封装在各自的类中,降低算法之间的耦合。
策略模式结构
- Context(环境类):维护一个策略对象的引用,负责策略对象的创建和切换。
- Strategy(策略接口):定义所有支持的算法的公共接口。
- ConcreteStrategyA(具体策略A):实现Strategy接口,定义算法的具体实现。
- ConcreteStrategyB(具体策略B):实现Strategy接口,定义算法的具体实现。
使用场景
- 有多个算法,且算法相互独立,无需关心算法之间的具体实现。
- 算法需要根据不同的情况选择使用。
- 需要动态切换算法。
示例
假设我们要设计一个排序算法,根据不同的需求,可以选择不同的排序算法,如冒泡排序、快速排序等。
// Context
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void execute() {
strategy.sort();
}
}
// Strategy
public interface Strategy {
void sort();
}
// ConcreteStrategyA
public class ConcreteStrategyA implements Strategy {
public void sort() {
// 冒泡排序
}
}
// ConcreteStrategyB
public class ConcreteStrategyB implements Strategy {
public void sort() {
// 快速排序
}
}
扩展阅读
更多设计模式的相关内容,请访问设计模式教程。