狀態(tài)模式定義
允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了他的類。其別名為狀態(tài)對象,狀態(tài)模式是一種對象行為型模式。
狀態(tài)模式結(jié)構(gòu)圖

共享狀態(tài)的實現(xiàn)
希望在系統(tǒng)中實現(xiàn)多個環(huán)境對象共享一個或多個狀態(tài)對象,那么需要將這些狀態(tài)對象定義為環(huán)境類的靜態(tài)成員對象。
狀態(tài)模式主要優(yōu)缺點
優(yōu)點
1.封裝了狀態(tài)轉(zhuǎn)換規(guī)則,在狀態(tài)模式中可以將狀態(tài)的狀態(tài)代碼封裝在環(huán)境類或者具體狀態(tài)類中,可以對狀態(tài)轉(zhuǎn)換代碼進行集中管理。而不是分散在一個個業(yè)務方法中。
2.將所有與摸個狀態(tài)有關(guān)的行為放到一個類中,只需要注入一個不同的狀態(tài)對象即可使用環(huán)境對象,擁有不同的行為。
3.允許狀態(tài)轉(zhuǎn)換邏輯與狀態(tài)對象合成一體,而不是提供一個巨大的條件語句塊,轉(zhuǎn)臺模式可以避免使用龐大的條件語句來將業(yè)務方法和狀態(tài)轉(zhuǎn)換代碼交織在一起。
4.可以讓多個環(huán)境對象共享一個狀態(tài)對象,從而減少系統(tǒng)對象的個數(shù)。
缺點
1.狀態(tài)模式的使用必然會增加系統(tǒng)中的類對象的個數(shù),導致系統(tǒng)運行開銷大。
2.狀態(tài)模式的程序結(jié)構(gòu)與實現(xiàn)都較為復雜,如果使用不當將導致程序結(jié)構(gòu)和代碼的混亂,增加系統(tǒng)設計的難度。
3.狀態(tài)模式對開閉原則的支持并不太好,增加in的狀態(tài)類需要修改那些負責狀態(tài)轉(zhuǎn)換的源代碼,否則無法轉(zhuǎn)換新增狀態(tài)。
狀態(tài)模式適用場景
1.對象行為依賴于他的狀態(tài),狀態(tài)的改變將導致行為的變化。
2.在代碼中包含大量與對象狀態(tài)的有關(guān)條件語句,這些條件語句的出現(xiàn),會導致代碼的可維護性和靈活性變差,不能方便的增加和刪除狀態(tài)。并且導致客戶類與類庫之間的耦合增強。