定義:定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換
既然需要演算法,那麼我們就來定義一組演算法,想一想,支付的演算法是什麼,當時就是判斷餘額,進行支付(當然真實環境中還有支付通知等)
按照這樣的邏輯我們先定義乙個支付抽象類:
public abstract class pay
return new result(500,"支付失敗","餘額不足");}}
然後再定義兩種支付方式:
支付寶支付
public class alipay extends pay
public bigdecimal getblance(string uid)
}
public class wechatpay extends pay
public bigdecimal getblance(string uid)
}
那麼有了支付方式我們就可以支付了,真的是這樣嗎?如果就這樣 到頭來我們還是需要if else 判斷,問題根本沒有解決,那怎麼來辦呢?
支付演算法有了,但是我們怎麼來選擇呢?這時我們需要將所有的支付方式都提供出來,需要用的時候供我們選擇就好了,
那麼重點來了,定義支付方式獲取策略:其實就是獲取支付方式例項
public class paystrategy
/*** 獲取支付
* @param key
* @return
*/public pay getpay(string key )
return pay.get(key);}}
支付策略搞定,我們來測試一下:
public class paytest
}
這裡有個缺點,就是我們需要知道一共有哪些支付方式,也就是有哪些支付策略,這是我們需要提前了解的。
當然這裡是web開發的話,我們可以將支付策略提供到頁面,讓使用者選擇心儀的支付方式(單選)。
如果這樣做是不是好了很多,避免了多重判斷,如果新增一種支付方式,擴充套件也很方便。但美中不足的就是需要提前了解有哪些策略(可以其他設計模式解決,如工廠模式),二呢類的數目增多了,相對於好處呢,這點缺點就不算什麼了。
最後看一下類圖:
idea中檢視類圖快捷鍵:ctr + alt + shift + u
多個類只有在演算法上略有不同
演算法需要自由切換
需要螢幕演算法規則
我們都可以使用策略模式來對應解決。
常用設計模式 策略模式實戰
什麼是策略模式?常用設計模式 策略模式 場景 假設有乙個支付的業務場景,不同 的訂單要做不同的處理 下面是普通的寫法 override public string order order order else if order.getsource equals ordersourceenum.wec...
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...