什麼是狀態模式程序員
所謂狀態模式,就是當一個對象的內在轉檯改變時容許改變其行爲,這個對象看起來就像是改變了其類的設計模式。狀態模式和策略模式都是爲具備多種可能情形設計的模式,二者的結構幾乎徹底同樣,但狀態模式的行爲是平行且不可替換的,而策略模式的行爲則是彼此獨立的。換句話說就是:狀態模式將各個狀態所對應的操做分離開來,即對於不一樣的狀態,由不一樣的子類實現具體操做;而策略模式是直接依賴參數進行選擇策略,不存在切換狀態的操做。設計模式
狀態模式的實現方式ide
古典名著《×××緣》第二十五回講述了唐敖和多九公等人乘船在海外遊歷兩面國的故事,兩面國的居民天生兩幅面孔(狀態),他們對人的態度(行爲)就是典型的狀態模式。首先定義一個行爲接口:性能
public interface IState { |
笑臉狀態:spa
public class GoodFace implements IState { |
兇臉狀態:orm
public class BadFace implements IState { |
兩面國的人天生是演員:blog
public class Actor { |
見到唐敖和多九公以後:
Actor actor = new Actor(); |
靜態的文字視覺衝擊力不夠,讀者能夠自覺百度「兩面國 木偶劇」,保證你對狀態模式印象深入。
Android源碼中的狀態模式
(1)WifiSetting
就像Android系統自帶拍照、裁剪、相冊等系統Activity同樣,WifiSetting是一個系統Fragment,用來展現控制Wifi鏈接的UI。Wifi的開啓中、已開啓、關閉中、已關閉就是一個典型的狀態模式。
Android開發中如何利用狀態模式
(1)當一個對象的行爲取決於它的狀態,而且它必須在運行時根據狀態改變它的行爲的時候適合使用狀態模式。所以從事loT開發的Android程序員應該常常用到狀態模式(loT設備的開機關機、播放暫停、BLE的鏈接斷開等)。
(2)當前任遺留代碼中包含大量不易維護的多分支語句(if-else或switch-case)語句,而且這些分支都與對象狀態有關而且依賴對象狀態時。此時能夠用狀態模式進行重構。
須要注意的幾個問題
(1)狀態模式的使用勢必會大大增長類和對象的數量,比策略模式還大,是典型的用性能和效率換開發進度的設計模式之一。
本系列其餘博客
【設計模式與Android】備忘錄模式——在齊太史簡