看下策略模式的定义 策略模式定义了一些列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变换。 首先,需要定义一个策略接口。 public interface Strategy { void travel(); } 然后根据不同的出行方式实行对应的接口 public class WalkStrategy implements Strategy{ @Override public void travel() { System.out.println("walk"); } } public class PlaneStrategy implements Strategy{ @Override public void travel() { System.out.println("plane"); } } public class SubwayStrategy implements Strategy{ @Override public void travel() { System.out.println("subway"); } } 此外还需要一个包装策略的类,并调用策略接口中的方法 public class TravelContext { Strategy strategy; public Strategy getStrategy() { return strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void travel() { if (strategy != null) { strategy.travel(); } } } 测试一下代码 public class Main { public static void main(String[] args) { TravelContext travelContext=new TravelContext(); travelContext.setStrategy(new PlaneStrategy()); travelContext.travel(); travelContext.setStrategy(new WalkStrategy()); travelContext.travel(); travelContext.setStrategy(new SubwayStrategy()); travelContext.travel(); } } 输出结果如下 plane walk subway 5 策略模式的优点与缺点 策略模式主要用来分离算法,根据相同的行为抽象来做不同的具体策略实现。很好的实现了开闭原则,也就是定义抽象,注入具体实现,从而达到很好的可扩展性。 优点 使用了组合,使架构更加灵活 富有弹性,可以较好的应对变化(开闭原则) 更好的代码复用性(相对于继承) 消除大量的条件语句 缺点 随着策略的增加,子类也会变得繁多。 选择何种算法需要客户端来创建对象,增加了耦合,这里可以通过与工厂模式结合解决该问题; 策略模式设计原则: 找出应用中需要变化的部分,把它们独立出来,不要和那些不需要变化的代码混在一起 面向接口编程,而不是面向实现编程 多用组合,少用继承 6 总结 策略模式在开发应用场景很多,平时有意识的运用好策略模式,可以很好的提高的程序的可维护性和可扩展性。 策略模式和工厂模式搭配使用