設(shè)計模式:狀態(tài)模式
什么是狀態(tài)模式
狀態(tài)模式(State Pattern),它允許一個對象其內(nèi)部狀態(tài)改變時改變它的行為。這種模式接近有限狀態(tài)機的概念。狀態(tài)模式可以解釋為策略模式,它能夠通過調(diào)用模式接口中定義的方法來切換策略。
狀態(tài)模式用于封裝同一對象的不同行為,基于其內(nèi)部狀態(tài)。這可以是對象在運行時更改其行為的更簡潔的方式,而無需求助于條件語句,從而提高可維護性。
一句話歸納
狀態(tài)驅(qū)動行為,行為決定狀態(tài)
代碼示例
人的一生會有三種狀態(tài),孩童時期、成年時期還有老年時期,我們在每一個時期都會做一些不同的事。
當(dāng)我們是孩子的時候,家長都會告訴我們“好好學(xué)習(xí),天天向上”,所以學(xué)習(xí)是我們的最重要的事;
當(dāng)我們是一個成年人的時候,身上會漸漸地產(chǎn)生一個叫做責(zé)任的東西,所以男人們就要“賺錢養(yǎng)家”了,當(dāng)一個家的脊梁;
當(dāng)我們是老年人的時候,過上了退休的休閑生活,但我還是勸諫大家,不要去跳“廣場舞”,依然堅持讀書,因為“史使人明智,讀詩使人靈透,數(shù)學(xué)使精細(xì),物理使人深沉,倫理使人莊重,邏輯修辭使人善辯”,希望大家都是一個愛讀書的人。

適用性
以下場景我建議你考慮使用
代碼中含有大量條件、分支判斷語句(諸如if...else、switch)的時候。
行為隨著狀態(tài)改變的時候。
現(xiàn)在很流行的狀態(tài)機就是狀態(tài)模式的強化版。
比如工作流流轉(zhuǎn)、商品訂單等等。
局限性
以下場景我希望你慎重使用
該模式一定會增加系統(tǒng)中對象和類的數(shù)量,會出現(xiàn)類膨脹想想看,所以我們叫它有限狀態(tài)機,建議不超過5個。
結(jié)構(gòu)與實現(xiàn)都較為復(fù)雜,如果使用不當(dāng)會導(dǎo)致程序結(jié)構(gòu)和代碼的混亂。
寫在最后
好兄弟可以點贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。
