1.平常会遇到这样的事情,完成同一个功能可以使用不同的方式,比如排序,可以使用冒泡排序也可以使用快速排序。策略模式就是符合这样的情况,当完成一件事有多种实现方式,可以根据环境或者其他条件去选择不同的方式去实现。避免了硬编码的方式,扩展和变更更加方便。避免了代码的重复,算的使用和算法的实现分离开。
2.下面以去西藏为例,我们可以选择乘坐火车,骑自行车,步行,这三种方式都可以到达拉萨。我们可以根据不同的的情况灵活选择出行的方式。
3.实现
package com.java.dp.strategy;
/**
* @Author lizhilong
* @create 2019/12/5 16:58
* @desc 出行策略接口
*/
public interface Traffic {
void trafficType(String name);
}
package com.java.dp.strategy;
/**
* @Author lizhilong
* @create 2019/12/5 16:59
* @desc 火车出行
*/
public class TrainType implements Traffic {
@Override
public void trafficType(String name) {
System.out.println(name+":坐上火车去拉萨");
}
}
package com.java.dp.strategy;
/**
* @Author lizhilong
* @create 2019/12/5 17:01
* @desc 步行出行
*/
public class WalkType implements Traffic {
@Override
public void trafficType(String name) {
System.out.println(name+":步行去拉萨");
}
}
package com.java.dp.strategy;
/**
* @Author lizhilong
* @create 2019/12/5 17:01
* @desc 自行车出行
*/
public class BikeType implements Traffic {
@Override
public void trafficType(String name) {
System.out.println(name+":骑上自行车去拉萨");
}
}
package com.java.dp.strategy;
import java.util.HashMap;
import java.util.Map;
/**
* @Author lizhilong
* @create 2019/12/5 17:03
* @desc 选择出行策略
*/
public class GoToTibet {
private static Map<String,Traffic> strategyMap = new HashMap<>();
static {
strategyMap.put("小张",new TrainType());
strategyMap.put("小王",new BikeType());
strategyMap.put("小李",new WalkType());
}
public void chooseTrafficType(String name){
Traffic traffic = strategyMap.get(name);
traffic.trafficType(name);
}
}
package com.java.dp.strategy;
/**
* @Author lizhilong
* @create 2019/12/5 17:05
* @desc
*/
public class StrategyMain {
public static void main(String[] args) {
GoToTibet goToTibet = new GoToTibet();
goToTibet.chooseTrafficType("小张");
System.out.println("----------------------\n");
goToTibet.chooseTrafficType("小王");
System.out.println("----------------------\n");
goToTibet.chooseTrafficType("小李");
}
}
小张:坐上火车去拉萨 ---------------------- 小王:骑上自行车去拉萨 ---------------------- 小李:步行去拉萨