简单来说,去除代码里面的if else 判断,我们以下单支付为例
package com.wei;
public class Order {
public void pay(String payType){
if("ali".equals(payType)){
System.out.println("支付宝");
}else if("wx".equals(payType)){
System.out.println("微信");
}
}
}
每多一种支付方式,需要改代码,加各种if判断,现在用策略模式去除if else
先定义一个支付接口
package com.wei;
public interface Payment {
void pay();
}
兩個支付实现
public class AliPayment implements Payment {
public void pay() {
System.out.println("支付宝");
}
}
public class WxPayment implements Payment {
public void pay() {
System.out.println("微信");
}
}
改造原来的订单支付方法
public class Order {
static Map<String, Payment> map = new HashMap<String, Payment>();
static{
map.put("ali", new AliPayment());
map.put("wx", new WxPayment());
}
public void pay(String payType){
map.get(payType).pay();
}
}
当然这个map可以单独抽象出去,或者用反射,配置,都可以更好的实现,payType也可以做成枚举判断,不过以上代码主要说明策略模式的重点
策略模式的优缺点
优点:
1、策略模式符合开闭原则
2、避免使用多重条件判断语句,如 if else语句、switch 语句
3、使用策略模式可以提高算法的保密性和安全性
缺点:
1、客户端必须知道所有的策略,并且自行决定使用哪一个策略类
2、代码中会产生非常多策略类,增加维护难度
当然如果业务很复杂,肯定要拆分,这都不算事,哈哈