設計模式心得(二) 策略模式

2021-06-19 02:55:13 字數 687 閱讀 4682

這次說說的設計模式是策略模式,什麼是策略模式呢。它定義了演算法家族,分別封裝起來,讓它們之間可以互相替換, 此模式讓演算法的變化,不會影響到使用演算法的客戶。下面用一幅uml圖來說明一下這個關係,這個圖屬於乙個比較典型的策略模式。

這個圖我們怎麼來理解呢?整個對於strategy介面(演算法)的呼叫,都是基於context類來使用,context類中宣告乙個strategy介面的的實現類,這個實現類裡面對自己特殊的演算法有自己的解釋。然後,我們就可以很簡單的明白其中的原理了,客戶端在呼叫的時候只需要例項化乙個context物件,在其建構函式裡面傳入需要的演算法即可。這樣當需求增加的時候,只需要繼續新增strategy介面的實現類即可,客戶端都不需要做任何的修改。

應用例項的說明,我們經常的進行購物,這時候其實就對這種策略模式有很大的需求,因為銷售策略會經常的變更和增加,比如增加積分兌換、會員打折、換購商品等等,而且不管是網購還是商場,銷售策略總是不斷的修改中,這樣如果我們在客戶端進行條件的判斷,就會引起對於客戶端的不斷修改,這個並不是我們所希望的,所以在策略模式的基礎上,新增上簡單工廠模式,對於context類的使用也使用乙個factory來生成,這樣在客戶端就不需要做任何的修改了。

其實對於策略模式,更多的如何的將業務抽象出方法介面(最好使用方法再能抽象出抽象類)。

設計模式 二 策略模式

定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...

設計模式(二) 策略模式

策略模式 strategy 它定義了乙個演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。現金收費抽象類 abstract class cashsuper 正常收費子類 class cashnormal cashsuper 打折收費子類 class ...

設計模式(二) 策略模式

策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。我們來實現乙個簡單的商場收銀軟體功能來闡述策略模式 1.我們先來定義乙個收費方式的基類,如下 using system namespace strategy 2.收費方案,如下 usin...