![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5COiFWOkNDZxAjNkdDZ4kzNzkjMxUGZ3UmMmZTOiZjZi9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
政策模式
政策模式作為一種軟體設計模式,指對象有某個行為,但是在不同的場景中,該行為有不同的實作算法。比如每個人都要“交個人所得稅”,但是“在美國交個人所得稅”和“在中國交個人所得稅”就有不同的算稅方法。
- 定義了一組算法(業務規則);
- 封裝了每個算法;
- 這組的算法可互換代替(interchangeable)。
優點:
- 算法可以自由切換
- 避免使用多重條件判斷
- 擴充性良好
缺點:
- 政策類會增多
- 所有政策類都需要對外暴露
應用場景:
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); }}