设计模式-策略模式
当遇到根据条件选择处理方式的情况,就可以考虑使用策略模式处理这种变化的可能性。
策略模式是对象行为型模式,关注行为和算法的封装。
例如你在计划一次多地旅行,在多个目的地间的通勤会选择相同或不同的交通方式
其中TrafficStrategy是抽象的接口
public interface TrafficStrategy {
void traffic(String departure, String destination);
}
它有三个不同的实现
public class AircraftTraffic implements TrafficStrategy {
@Override
public void traffic(String departure, String destination) {
System.out.println("乘坐飞机从" + departure + "到" + destination);
}
}
public class SelfDrivingTraffic implements TrafficStrategy {
@Override
public void traffic(String departure, String destination) {
System.out.println("自驾从" + departure + "到" + destination);
}
}
public class HighSpeedRailTraffic implements TrafficStrategy {
@Override
public void traffic(String departure, String destination) {
System.out.println("乘坐高铁从" + departure + "到" + destination);
}
}
使用上下文降低耦合
public class TrafficContext {
private TrafficStrategy strategy;
public TrafficContext(TrafficStrategy strategy) {
this.strategy = strategy;
}
public void travel(String departure, String destination){
strategy.traffic(departure, destination);
}
}
使用
public class Traval {
public static void main(String[] args) {
TrafficContext context;
context = new TrafficContext(new AircraftTraffic());
context.travel("家", "北京");
context = new TrafficContext(new SelfDrivingTraffic());
context.travel("北京", "上海");
context = new TrafficContext(new HighSpeedRailTraffic());
context.travel("上海", "深圳");
context = new TrafficContext(new AircraftTraffic());
context.travel("深圳", "家");
}
}
策略模式可以用来封装几乎任何类型的规则,遇到在不同时间使用不同业务规则的状况,可以考虑使用