避免过量使用多重条件判断语句
提供一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,避免重复的代码
提供相同功能不同实现
完美实现开闭原则,添加新算法灵活
抽象策略类:定义了一个公共接口,各种不同算法以不同的方式实现这个接口
具体策略类:实现了抽象策略类定义的接口,提供具体算法的实现
环境类:持有一个策略类引用,最终交给客户端调用
public class StrategyModeTest {
interface Strategy {
public void strategyMethod();
}
static class ConcreteStrategyA implements Strategy {
@Override
public void strategyMethod() {
System.out.println("具体策略A的策略方法被访问!");
}
}
static class ConcreteStrategyB implements Strategy {
@Override
public void strategyMethod() {
System.out.println("具体策略B的策略方法被访问!");
}
}
static class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void strategyMethod() {
strategy.strategyMethod();
}
}
static class Client {
public Client() {
Strategy strategyA = new ConcreteStrategyA();
Context context = new Context(strategyA);
context.strategyMethod();
System.out.println("----------------------------");
Strategy strategyB = new ConcreteStrategyB();
context = new Context(strategyB);
context.strategyMethod();
}
}
public static void main(String[] args) {
new Client();
}
}