文章目錄
- 1. 政策模式介紹
-
- 1.1 定義
- 1.2 角色組成
- 1.3 應用場景
- 2. 代碼示範
-
- 2.1 場景介紹
- 2.2 不使用政策模式
-
- 2.2.1 代碼
- 2.2.2 存在的問題
- 2.3 使用政策模式 + 工廠模式
-
- 2.3.1 類圖
- 2.3.2 代碼
- 2.4 政策模式優缺點
- 3. 總結
- 3. 總結
1. 政策模式介紹
1.1 定義
在政策模式(Strategy Pattern)中,一個類的行為或其算法可以在運作時更改。這種類型的設計模式屬于行為型模式。
百度上說: 指對象有某個行為,但是在不同的場景中,該行為有不同的實作算法。比如每個人都要“交個人所得稅”,但是“在美國交個人所得稅”和“在中國交個人所得稅”就有不同的算稅方法。
1.2 角色組成
規則是死的,人是活的,我們應該靈活運用。什麼環境角色,無所謂的。
- 抽象政策角色: 政策類,通常由一個接口或者抽象類實作。
- 具體政策角色:包裝了相關的算法和行為。
- 環境角色:持有一個政策類的引用,最終給用戶端調用
1.3 應用場景
- 1、 多個類隻差別在表現行為不同,可以使用Strategy模式,在運作時動态選擇具體要執行的行為。
- 比如:你支付,你可以用支付寶、微信、qq,那麼這個就是 支付政策中的不同的實作方式。
- 2、 需要在不同情況下使用不同的政策(算法),或者政策還可能在未來用其它方式來實作。
- 3、 對客戶隐藏具體政策(算法)的實作細節,彼此完全獨立。
2. 代碼示範
2.1 場景介紹
比如我們買東西,有時候會有促銷,比如促銷政策有:優惠券優惠、返現優惠、或者熟人邀請碼優惠(“😂我瞎想的”)
那麼這三個統稱為促銷政策。
2.2 不使用政策模式
2.2.1 代碼
假設使用的mvc三層
- Controller 類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結 - Service 類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結 - 調用類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結
2.2.2 存在的問題
- 如果又增加了新的條件,那麼在service類裡面,還是要加 判斷,加方法等。提高了複雜度,和維護難度
- 看起來也比較臃腫。不美觀。哈哈
2.3 使用政策模式 + 工廠模式
2.3.1 類圖
2.3.2 代碼
其實最主要的還是這寫個政策類,運用多态的原理實作。具體怎麼用,可以靈活搭配吧,我個人認為。
- 政策抽象類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結 - 促銷政策的三個實作類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結 設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結 - 獲得對應政策的工廠類(解釋看代碼注釋)
- Service 類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結 - 測試類
設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結
2.4 政策模式優缺點
優點:
1、算法可以自由切換。
2、避免使用多重條件判斷。
3、擴充性良好。
缺點:
1、政策類會增多(每一個政策,都需要一個類)。
2、所有政策類都需要對外暴露。
3. 總結
這次總結的不到位,很正常,因為我本身也沒有 太了解這個模式。希望在以後的學習中,可以領悟到這個模式的精髓吧。。。。。
1、政策類會增多(每一個政策,都需要一個類)。
2、所有政策類都需要對外暴露。
3. 總結
這次總結的不到位,很正常,因為我本身也沒有 太了解這個模式。希望在以後的學習中,可以領悟到這個模式的精髓吧。。。。。