标签:
策略模式:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
具体策略角色:包装了相关的算法和行为。
环境角色:持有一个策略类的引用,最终给客户端调用。
代码实例:
问题:旅游出行方式可以有多种,如可以乘坐飞机旅游,也可以乘火车旅游,如果有兴趣自行车游也是一种极具乐趣的出行方式。不同的旅游出行方式有不同的实现过程,客户根据自己的需要选择一种合适的旅游方式。请用策略模式来模拟这一过程,需要有测试程序。
//策略接口 public interface TravelStrategy { void travel(); } //飞机策略类 public class AirplaneStrategy implements TravelStrategy { @Override public void travel() { System.out.println("AirplaneStrategy!"); } } //自行车策略类 public class BicycleStrategy implements TravelStrategy{ @Override public void travel() { System.out.println("BicycleStrategy!"); } } //火车策略类 public class TrainStrategy implements TravelStrategy { @Override public void travel() { System.out.println("TrainStrategy!"); } } //策略类引用类:决策者 public class Person{ private TravelStrategy strategy; public Person(TravelStrategy strategy) { this.strategy = strategy; } public void setStrategy(TravelStrategy strategy) { this.strategy = strategy; } public void travel(){ strategy.travel(); } } //测试类 public class Test { public static void main(String[] args) { TravelStrategy strategy = new AirplaneStrategy(); Person person = new Person(strategy); person.travel(); System.out.println("--------------------"); TravelStrategy strategy1 = new TrainStrategy(); person.setStrategy(strategy1); person.travel(); System.out.println("--------------------"); TravelStrategy strategy2 = new BicycleStrategy(); person.setStrategy(strategy2); person.travel(); System.out.println("--------------------"); } } 输出结果: AirplaneStrategy! -------------------- TrainStrategy! -------------------- BicycleStrategy! --------------------
标签:
原文地址:http://www.cnblogs.com/crazy2016/p/5572942.html