策略模式简介:
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
策略模式组成:
—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
上面内容来自百度百科!!!
策略模式实现:
下面的内容根据实际项目中策略模式的应用修改而来,只参考代码结构,和原有业务毫无关系。
public class TravelContext {
final static String PLANE = "PLANE";
final static String BUS = "BUS";
final static String TRAIN = "TRAIN";
public static void main(String[] args) throws Exception {
TravelTemplate template = TravelTemplate.getInstance(PLANE);
template.validate("123","张三");
template.setPhone("123456789");
template.pay();
}
}
public abstract class TravelTemplate{
public static final TravelTemplate getInstance(String carType) throws Exception {
switch (carType){
case "BUS":
return TravelStrategyMode.Bus.getInstance();
case "PLANE":
return TravelStrategyMode.Plane.getInstance();
case "TRAIN":
return TravelStrategyMode.Train.getInstance();
default:
throw new Exception("不支持的出行方式!");
}
}
public void validate(String certNo,String name){
//省略一堆业务逻辑
System.out.println("校验成功!");
}
public void setPhone(String phone){
//省略一堆业务
System.out.println("预留手机号已保存!");
}
abstract void pay();
}
public class TravelStrategyMode {
public static class Bus extends TravelTemplate{
static Bus getInstance(){
return new Bus();
}
private Bus(){
}
public void pay(){
System.out.println("需要支付100元!");
}
}
public static class Train extends TravelTemplate{
static Train getInstance(){
return new Train();
}
private Train(){
}
public void pay(){
System.out.println("需要支付500元!");
}
}
public static class Plane extends TravelTemplate{
static Plane getInstance(){
return new Plane();
}
private Plane(){
}
public void pay(){
System.out.println("需要支付1000元!");
}
}
}
结果:



