天天看點

政策模式應用場景_政策模式在支付系統的使用

政策模式應用場景_政策模式在支付系統的使用

政策模式

政策模式作為一種軟體設計模式,指對象有某個行為,但是在不同的場景中,該行為有不同的實作算法。比如每個人都要“交個人所得稅”,但是“在美國交個人所得稅”和“在中國交個人所得稅”就有不同的算稅方法。

  1. 定義了一組算法(業務規則);
  2. 封裝了每個算法;
  3. 這組的算法可互換代替(interchangeable)。

優點:

  1. 算法可以自由切換
  2. 避免使用多重條件判斷
  3. 擴充性良好

缺點:

  1. 政策類會增多
  2. 所有政策類都需要對外暴露

應用場景:

1、 多個類隻差別在表現行為不同,可以使用Strategy模式,在運作時動态選擇具體要執行的行為。

2、 需要在不同情況下使用不同的政策(算法),或者政策還可能在未來用其它方式來實作。

3、 對客戶隐藏具體政策(算法)的實作細節,彼此完全獨立

政策模式在支付系統的使用

政策模式應用場景_政策模式在支付系統的使用

PayStrategy

public interface PayStrategy {   public void pay(Object obj);}
           

微信支付

public class WechatPayStrategy implements PayStrategy{   @Override   public void pay(Object obj) {      System.out.println("do wechat pay");   }}
           

支付寶支付

public class AliPayStrategy implements PayStrategy{   @Override   public void pay(Object obj) {      System.out.println("do alipay");   }}
           

context

public class Context {   private PayStrategy payStrategy;    public Context(PayStrategy payStrategy){      this.payStrategy = payStrategy;   }    public void executeStrategy(Object obj){      return strategy.pay(obj);   }}
           

StrategyPatternDemo

public class StrategyPatternDemo {   public static void main(String[] args) {      Object wechatPayObj = new Object();      Context context = new Context(new WechatPayStrategy());          context.executeStrategy(wechatPayObj);       Object aliPayObj = new Object();      context = new Context(new AliPayStrategy());            context.executeStrategy(aliPayObj);    }}