Posted on 2009-12-29 21:25
rikisand 閱讀(513)
評論(0) 編輯 收藏 引用 所屬分類:
工作記錄~~everyday 、
Design Pattern
STATE 模式:
一個(gè)對象的行為取決于他的狀態(tài),而且它必須在運(yùn)行時(shí)根據(jù)狀態(tài)改變他的行為。常規(guī)實(shí)現(xiàn)中,一個(gè)操作含有龐大的多分支的條件語句,且這些分支依賴于該對象的狀態(tài)。這個(gè)狀態(tài)通常使用一個(gè)或者多個(gè)枚舉常量表示。STate模式把這些狀態(tài)時(shí)候的對象看做一個(gè)獨(dú)立的對象,也就是將不同狀態(tài)時(shí)的行為分散到相應(yīng)的狀態(tài)類中。要達(dá)到這樣的效果,需要context,也就是狀態(tài)的持有者,即原先的類;抽象狀態(tài)類,他封裝了與context交互的接口;具體狀態(tài)類,也就是一個(gè)個(gè)的具體狀態(tài)。context中保存一個(gè)抽象狀態(tài)類對象為成員,并delegate對象行為給他,從而使相應(yīng)狀態(tài)下的行為代碼生效。如果狀態(tài)改變的準(zhǔn)則不是固定的則state狀態(tài)類同時(shí)應(yīng)該重寫changestate類以控制狀態(tài)的改變,否則可以在context中實(shí)現(xiàn)。
具體到我們的項(xiàng)目:
每一個(gè)device即為context,他擁有一個(gè)state對象,device中的函數(shù)processMsg(){state->processMSg();} 由于狀態(tài)改變的規(guī)則依賴于收到的消息,也就是說一個(gè)狀態(tài)可能轉(zhuǎn)換到多個(gè)狀態(tài)device的每個(gè)狀態(tài)需要重寫statechange方法,stateChange(){state->stateChange(this,msg);} 這樣,不同的狀態(tài)下的行為實(shí)現(xiàn)在具體狀態(tài)的類中,比原先的版本清晰明了,可讀性更強(qiáng)。