定义场景
实现某一种功能有诸多算法或者策略,如果简单的将这些算法或者策略进行封装,随着工程的迭代,往往导致会导致封装好的算法类非常臃肿,难于扩展。而策略模式恰好解决了这一难题,使得算法独立于他的调用者独立运行,易于扩展,满足软件开发的高内聚低耦合的要求。类图
![Java设计模式(二)——策略模式 Java设计模式(二)——策略模式](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRaeTVpYkc5bkxtTnpaRzR1Ym1WMEx6SXdNVGN3TXpNd01qRXpNalUzTVRBd1AzZGhkR1Z5YldGeWF5OHlMM1JsZUhRdllVaFNNR05FYjNaTU1rcHpZakpqZFZrelRtdGlhVFYxV2xoUmRscFljREpoVjFZeldETldkV0ZZV25CYVdHTTlMMlp2Ym5Rdk5XRTJURFZNTWxRdlptOXVkSE5wZW1Vdk5EQXdMMlpwYkd3dlNUQktRbEZyUmtOTlFUMDlMMlJwYzNOdmJIWmxMemN3TDJkeVlYWnBkSGt2UTJWdWRHVnk%3D.jpg?w=700&webp=1)
1)环境(Context)角色:持有一个Strategy的引用。
2)抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
3)具体策略(StrategyX)角色:包装了相关的算法或行为。
具体代码实现
持有策略对象的引用类
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute() {
strategy.doWork();
}
}
策略接口
public interface Strategy {
void doWork();
}
具体实现类
public class NewConsumer implements Strategy {
@Override
public void doWork() {
System.out.print("is new");
}
}