狀態(tài)機(jī)的簡單介紹

最近公司做棋牌的項(xiàng)目,當(dāng)時(shí)還是不理解什么是狀態(tài)機(jī),當(dāng)一個(gè)項(xiàng)目做完之后,大腦里已經(jīng)有了一個(gè)狀態(tài)機(jī)的概念,所以今天就與大家分享出來,由于本人的技術(shù)博淺,有很多地方?jīng)]有理解通透的地方,請望大神指點(diǎn),抱拳了。

什么是狀態(tài)機(jī)?

我理解的狀態(tài)機(jī)就是,當(dāng)一個(gè)事件觸發(fā)之后,就會(huì)去尋找一個(gè)相對應(yīng)的大的狀態(tài),然后在到大的狀態(tài)里去尋找小的狀態(tài),然后執(zhí)行完畢,給用戶返回。

可能本人理解的不是多通透,在此邊查資料邊學(xué)習(xí),與大家一起分享。

一丶狀態(tài)模式

狀態(tài)模式(State):當(dāng)一個(gè)對象的內(nèi)在狀態(tài)改變時(shí)允許改變其行為,這個(gè)對象看起來像是改變了其類。

狀態(tài)模式主要解決的是當(dāng)控制一個(gè)對象狀態(tài)轉(zhuǎn)換的條件表達(dá)式過于復(fù)雜時(shí)的情況,把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類當(dāng)中,可以把復(fù)雜的邏輯簡化,當(dāng)然如果這個(gè)狀態(tài)判斷很簡單,那就沒有必要用 "狀態(tài)模式" 了。

狀態(tài)模式結(jié)構(gòu)圖

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

State類,抽象狀態(tài)類,定義一個(gè)接口以封裝與Context的一個(gè)特定狀態(tài)相關(guān)的行為

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) State類

ConcreteState類,具體狀態(tài),每一個(gè)子類實(shí)現(xiàn)以個(gè)與Context的一個(gè)狀態(tài)相關(guān)行為

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)ConcreteState

Context類,維護(hù)一個(gè)ConcreteState子類的實(shí)列,這個(gè)實(shí)列定義當(dāng)前的狀態(tài)

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) Context類

客戶端代碼

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 客戶端代碼

狀態(tài)模式的好處與壞處

狀態(tài)模式的好處是將于特定狀態(tài)相關(guān)的行為局部化,并且將不同的狀態(tài)的行為分割開來。

將特定的狀態(tài)相關(guān)的行為都放入一個(gè)對象中,由于所有與狀態(tài)相關(guān)的代碼都存在與某個(gè)ConcreteState中,所以通過定義新的子類可以很容易地增加新的狀態(tài)和轉(zhuǎn)換。

這樣做的目的是什么?

這樣做的目的說白了就是為了消除龐大的條件分之語句,大的分之判斷會(huì)使得它們難以修改和擴(kuò)展,就想刻板和印刷一樣,任何改動(dòng)都是致命的,狀態(tài)模式通過把各種狀態(tài)轉(zhuǎn)移邏輯分布到State的子類之間,來減少相互依賴,好比把整個(gè)版面改成一個(gè)又一個(gè)的活字,此時(shí)候就容易維護(hù)和擴(kuò)展了。

什么時(shí)候應(yīng)該考慮使用狀態(tài)模式呢?

當(dāng)一個(gè)對象的行為取決于它的狀態(tài),并且它必須在運(yùn)行時(shí)刻根據(jù)狀態(tài)改變它的行為時(shí),就可以考慮使用狀態(tài)模式了。

參考設(shè)計(jì)模式舉例 - 工作狀態(tài)

代碼結(jié)構(gòu)圖

 seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

抽象狀態(tài)類,定義一個(gè)抽象方法"寫程序"

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 抽象狀態(tài)類

上午和中午工作狀態(tài)類

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 上午工作狀態(tài)類

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 中午工作狀態(tài)

下午和傍晚工作狀態(tài)類

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 下午工作狀態(tài)

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 晚間工作狀態(tài)

睡眠狀態(tài)和下班休息狀態(tài)類

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 睡眠狀態(tài)

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 下班休息狀態(tài)

工作類

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 工作類

客戶端代碼

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn) 客戶端代碼

結(jié)果表現(xiàn)如下

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

1 當(dāng)前時(shí)間:10點(diǎn) 上午工作, 精神百倍2 當(dāng)前時(shí)間:12點(diǎn) 餓了,午飯:犯困,午休3 當(dāng)前時(shí)間:13點(diǎn) 下午狀態(tài)還不錯(cuò),繼續(xù)努力4 當(dāng)前時(shí)間:14點(diǎn) 下午狀態(tài)還不錯(cuò),繼續(xù)努力5 當(dāng)前時(shí)間:17點(diǎn) 加班哦,疲勞之極6 當(dāng)前時(shí)間:19點(diǎn) 加班哦,疲勞之極7 當(dāng)前時(shí)間:22點(diǎn) 不行了,睡著了

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

狀態(tài)機(jī)的理解,大概就是這樣,從一個(gè)大的狀態(tài)切換到一個(gè)小的狀態(tài)。

http://www.cnblogs.com/wuyongcong/p/7146891.html