天天看點

設計模式--狀态模式

STATE?跟MM交往時,一定要注意她的狀态哦,在不同的狀态時她的行為會有不同,比如你約她今天晚上去看電影,對你沒興趣的MM就會說“有事情啦”,對你不讨厭但還沒喜歡上的MM就會說“好啊,不過可以帶上我同僚麼?”,已經喜歡上你的MM就會說“幾點鐘?看完電影再去泡吧怎麼樣?”,當然你看電影過程中表現良好的話,也可以把MM的狀态從不讨厭不喜歡變成喜歡哦。   狀态模式:狀态模式允許一個對象在其内部狀态改變的時候改變行為。這個對象看上去象是改變了它的類一樣。狀态模式把所研究的對象的行為包裝在不同的狀态對象裡,每一個狀态對象都屬于一個抽象狀态類的一個子類。狀态模式的意圖是讓一個對象在其内部狀态改變的時候,其行為也随之改變。狀态模式需要對每一個系統可能取得的狀态創立一個狀态類的子類。當系統的狀态變化時,系統便改變所選的子類。

其實就是在不同類中改變類的行為,對象的行為封裝在各個子類的方法裡面,這個子類的行為方法來自抽象的父類或者接口的方法的不同實作。對象的行為根據對象的改變,行為發生改變。

舉例子說明:

State.java

GrilA.java

GrilB.java

Context.java

StateModel.java --根據對象的不同,所産生的行為(request的産生結果不同)。

結果:

GrilB not want to see :firm

GrilA want to see :firm

 2015年12月12日19:58:59更新

貌似所有的設計模式的缺點都是增加類檔案

使用場景:

比如用戶端登入和登出這種不同狀态的情況下不同邏輯操作的代碼就可以使用狀态模式去實作。

1,已經登入可以實作登陸後的操作,比如編輯個人資料,下訂單

2,未登入調用編輯資料,下訂單就會進入登入界面,先去進行登入

如上就是兩個不同的狀态類,已經登入,未登入兩種狀态

3,可以抽象共性的東西,比如編輯個人資料,下訂單,隻是在不同的狀态下實作的内容不同而已,是以有1,2的不同實作。

4,狀态管理類,根據設定不同的狀态類來調用不同狀态類裡面的方法,比如編輯個人資料,下訂單的邏輯。

繼續閱讀