策略模式-代替过多的if-else
简介
策略模式简单的来说就是多了一个中间者来分配接下来做的事情
看uml图
context:策略入口,以及分配策略
strategy:策略的抽象类
xxxstrategy:具体策略
例子
拿支付来说,支付包括微信支付,支付宝支付等,不同的支付有不同的支付方式,如果用if-else-if太多,这里就可以使用策略模式
上代码:
context:
public interface Context {
Strategy getStrategy(Integer payType);
}
public class PayContext implements Context {
// 根据订单的具体类型,返回对应的支付策略
@Override
public Strategy getStrategy(Integer payType) {
switch (payType) {
case 1:
return new ALiPayStrategy();
case 2:
return new WeiXinPayStrategy();
default:
return null;
}
}
}
strategy:
public interface Strategy {
boolean pay();
}
// 阿里支付
public class ALiPayStrategy implements Strategy {
@Override
public boolean pay() {
System.out.println("aliPay===================");
return false;
}
}
// 微信支付
public class WeiXinPayStrategy implements Strategy {
@Override
public boolean pay() {
System.out.println("WeiXinPay====================================");
return false;
}
}
main方法测试:
public static void main(String[] args) {
PayContext payContext = new PayContext();
// 阿里支付
Strategy strategy = payContext.getStrategy(1);
strategy.pay();
// 微信支付
Strategy strategy2 = payContext.getStrategy(2);
strategy2.pay();
}
打印日志:
总结:
例子很简单,思路类似这样,当遇到多种类型的需求就可以用策略模式来代替if-eles-if。
提示:context可以使用spring4泛型注入或者工厂模式来代替都行。