天天看點

設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結

文章目錄

  • 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 存在的問題

  1. 如果又增加了新的條件,那麼在service類裡面,還是要加 判斷,加方法等。提高了複雜度,和維護難度
  2. 看起來也比較臃腫。不美觀。哈哈

2.3 使用政策模式 + 工廠模式

2.3.1 類圖

設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結

2.3.2 代碼

其實最主要的還是這寫個政策類,運用多态的原理實作。具體怎麼用,可以靈活搭配吧,我個人認為。
  • 政策抽象類
    設計模式(5) -行為型模式之 - 政策模式1. 政策模式介紹2. 代碼示範3. 總結3. 總結
  • 促銷政策的三個實作類
    設計模式(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. 總結

這次總結的不到位,很正常,因為我本身也沒有 太了解這個模式。希望在以後的學習中,可以領悟到這個模式的精髓吧。。。。。