策略模式之支付案例實戰
阿新 • • 發佈:2018-12-09
策略模式(Strategy)屬於物件行為型設計模式,主要是定義一系列的演算法,把這些演算法一個個封裝成擁有共同介面的單獨的類,並且使它們之間可以互換。策略模式使這些演算法在客戶端呼叫它們的時候能夠互不影響地變化。這裡的演算法不要狹義的理解為資料結構中演算法,可以理解為不同的業務處理方法。
這種做法會帶來什麼樣的好處呢?
它將演算法的使用和演算法本身分離,即將變化的具體演算法封裝了起來,降低了程式碼的耦合度,系統業務策略的更變僅需少量修改。
演算法被提取出來,這樣可以使演算法得到重用,這種情況還可以考慮使用享元模式來共享演算法物件,來減少系統開銷(但要注意使用享元模式的建議條件)。
三、結構
先由定義來想象下它的結構吧:要使演算法擁有共同的介面,這樣就要實現一個介面或者一個抽象類出來才行。這樣基本上輪廓也就出來了,我們來看看:
策略模式由三個角色組成:
1) 演算法使用環境(Context)角色:演算法被引用到這裡和一些其它的與環境有關的操作一起
來完成任務。
2) 抽象策略(Strategy)角色:規定了所有具體策略角色所需的介面。在 java 它通常由介面
或者抽象類來實現。
3) 具體策略(Concrete Strategy)角色:實現了抽象策略角色定義的介面。
支付的程式碼實現如下:
//策略的執行體(容器) public class Context { private Strategy strategy; public Context(Strategy strategy) { super(); this.strategy = strategy; } //給商店付錢 public void pay2Store(){ this.strategy.pay(); } } public class MainClass { public static void main(String[] args) { Context context=new Context(new ZhiFuBaoStrategy()); context.pay2Store(); } } public interface Strategy { //支付方法 public void pay(); } /** * 微信策略 * @author Administrator * */ public class WeiXinStrategy implements Strategy{ public void pay() { System.out.println("採用微信支付"); } } /** * 支付寶支付策略 * @author Administrator * */ public class ZhiFuBaoStrategy implements Strategy{ public void pay() { System.out.println("採用支付寶支付"); } }