策略模式

简单来说,去除代码里面的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 map = new HashMap();
    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、代码中会产生非常多策略类,增加维护难度
当然如果业务很复杂,肯定要拆分,这都不算事,哈哈

你可能感兴趣的:(策略模式)