APP開發實戰45-設計模式介紹3
13.3.5策略模式
策略模式定義一系列的演算法,並把每一個演算法封裝起來, 且使它們可相互替換,使得演算法的變化可獨立於使用它的客戶。
此模式的使用場景:
(1)針對同一類問題的多種處理方式,僅僅是具體行為有差別時。
(2)需要安全地封裝多種同一型別操作時。
(3)出現同一抽象類有多個子類,而又需要使用if-else或switch-case來選擇具體子類時。
如各類列表的排序功能,及計算各類商品的費用時(不同商品的單價和總價的計算方式可能不同),可以使用策略模式。
13.3.6狀態模式
狀態模式允許一個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它所屬的類。
狀態模式將每一個條件分支放入一個獨立的類中,這使得可以根據物件自身的情況將物件狀態作為一個物件,這一物件可以不依賴於其他物件而獨立變化,通過多型來去除過多的、重複的if-else等分支語句。
此模式的使用場景:
(1)一個物件的行為取決於它的狀態,且它必須在執行時根據狀態改變它的行為。
(2)程式碼中包含大量與物件狀態有關的條件語句,且這些分支依賴於改物件的狀態。
(3)出現同一抽象類有多個子類,而又需要使用if-else或switch-case來選擇具體子類時。
如電商APP的訂單物件有多種狀態,及使用者登入物件有已登入和未登入兩種狀態,都可使用狀態模式。
13.3.7命令模式
命令模式將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可取消的操作。
此模式的使用場景:
(1)需要抽象出待執行的動作,然後以引數的形式提供出來。
(2)需要支援取消操作。
(3)支援修改日誌功能和事務操作。
如遊戲開發和選單功能開發,都可使用命令模式。
13.3.8觀察者模式
觀察者模式定義物件間的一種一對多的依賴關係,以便當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動重新整理。
此模式的使用場景:
(1)有關聯行為的地方。
(2)事件多級觸發的地方。
(3)跨系統的訊息交換,如訊息佇列和事件匯流排的處理機制。
如Android的BroadcastReceiver元件功能、GUI系統和訂閱-釋出系統,都是使用觀察者模式。
參考:《Android原始碼設計模式解析與實戰》