例子:我们旅游选择出行方式,传统if-else
public class Temp { public static void main(String[] args) { travelPlan("B"); } public static void travelPlan(String travel){ if("A".equals(travel)){ System.out.println("坐飞机"); }else if("B".equals(travel)){ System.out.println("坐火车"); }else if("C".equals(travel)){ System.out.println("坐汽车"); } } }使用策略模式
// 定义策略角色 public interface TravelStrategy { void doTravel(String travel); } ```java //定义具体的实现策略1 public class AirplaneTravel implements TravelStrategy { public void doTravel(String travel) { System.out.println("坐飞机"); } } //定义具体的实现策略2 public class CarTravel implements TravelStrategy{ public void doTravel(String travel) { System.out.println("坐汽车"); } } //定义具体的实现策略3 public class TrainTravel implements TravelStrategy { public void doTravel(String travel) { System.out.println("坐火车"); } } // 定义上下文,负责使用策略角色 public class TravelContext { private TravelStrategy travelStrategy; private String travel; public TravelContext(TravelStrategy travelStrategy, String travel) { this.travelStrategy = travelStrategy; this.travel = travel; } public TravelStrategy getTravelStrategy(){ return travelStrategy; } public boolean option(String travel){ return this.travel.equals(travel); } } /** * 使用策略模式将策略的定义,创建,使用解耦,让每一步变得简单,也可以使用这种模式替代传统的if-else语句,当我们有新的需求是时,只要定义好 具体的实现策略,然后加在静态代码块中就可以,其他不用修改,这样代码看起来比家简洁整齐,用java的话可以使用反射避免对类的修改,满足开闭原则。*/ import java.util.ArrayList; import java.util.List; public class Share { private static List<TravelContext> list=new ArrayList<TravelContext>(); // 加载策略 static { list.add(new TravelContext(new AirplaneTravel(),"A")); list.add(new TravelContext(new TrainTravel(),"B")); list.add(new TravelContext(new CarTravel(),"C")); } public static void main(String[] args) { doTravel("C"); } public static void doTravel(String travel) { for (TravelContext travelContext : list) { if(travelContext.option(travel)){ TravelStrategy travelStrategy = travelContext.getTravelStrategy(); travelStrategy.doTravel(travel); break; } } } }