类图
注意
如果在一个系统里面有许多类,它们的区别只在于它们的行为。
使用switch case 或 其他 条件判断语句的地方
一个系统需要动态的在几个算法中选择其一
使用哪个策略是由外部环境决定的
优点:
策略模式提供了管理算法族的办法
提供了可以取代继承的办法
可以避免多重的条件判断语句
策略模式符合开闭原则
缺点
过多的策略类造成了类膨胀
客户端需要理解ConcreteStrategy的功能
代码实现
Strategy
public interface Strategy { public void travelStrategy(); }
ConcreteStrategy
public class BusStrategy implements Strategy { @Override public void travelStrategy() { System.out.println("乘坐大巴"); } }
public class TrainStrategy implements Strategy { @Override public void travelStrategy() { System.out.println("乘坐火车"); } }
public class WalkStrategy implements Strategy { @Override public void travelStrategy() { System.out.println("步行"); } }
Context
public class TravelContext { private Strategy strategy; public void setStrategy(Strategy s) { strategy = s; } public void travel() { System.out.println("要去旅行了"); strategy.travelStrategy(); } }
Client
public class MainClass { public static void main(String[] args) { TravelContext context = new TravelContext(); context.setStrategy(new WalkStrategy()); context.travel(); } }