對於狀態模式,《大話設計模式》是以人從上班到下班到加班的狀態來展開講述的。狀態模式其實就是某乙個物件在某個過程或者時間的乙個狀態記錄,但是這個狀態的順序不能發生變化,在程式設計方面可能要比其他模式稍微複雜點,請待我慢慢將來。
本人喜歡用**來形象的講述原理,可能是因為對單純的看些理論的書有些反感或者無趣吧,我希望以後的教育也如此,要不大家都不高考了。。。嘿嘿說多了
狀態模式:當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。
還是**呈現吧,概念太抽象了。
1、狀態類,在該狀態幹什麼
/**
*@authorjzhf
*2014-11
-06 */
public
inte***cestate
2、工作類,記錄了當前狀態的時間、完成情況、當前狀態
public
classwork
//完成工作狀態設定
public
booleantaskfinished()
//工作內容
public
voidwriteprogram()
public
intgethour()
public
voidsethour(inthour)
public
booleanisfinished()
public
voidsetfinished(booleanfinished)
publicstate getcurrentstate()
public
voidsetcurrentstate(state currentstate)
}3、上午九點狀態
public
classforenoonstateimplementsstateelse}}
}4、中午狀態
public
classnoonstateimplementsstateelse}}
}5、下午狀態
public
classafternoonstateimplementsstateelse}}
}6、晚上加班狀態
public
classeveningstateimplementsstateelse
if(work.gethour() <21)}}
}7、如果不加班,直接睡覺,狀態結束
public
classsleepingstateimplementsstate
}8、客戶端
public
classstateclient
}通過**講述乙個故事,對狀態模式有了很形象的詮釋,我想不用解釋也能理解狀態模式是什麼了,就是乙個過程的某個點的狀態,並且該狀態是由順序的。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。
總結:狀態模式就是將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來,說白了目的就是為了消除龐大的條件分支語句。
大話設計模式 狀態模式
在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。大話設計模式中程傑老師給出的定義是,狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改...
大話設計模式 狀態模式
首先看一段 public class work else if hour 13 else if hour 17 else elseelse 當有很多條件判斷時,且很多的條件判斷後產生了很多的業務邏輯,雖然 可以正常執行,但是要修改某個邏輯,既整改邏輯流程也許就回發生改變,從而加大了維護時間的成本,並...
設計模式之十二 狀態模式 State
狀態模式 當乙個物件的內部狀態發生變化時同意改變它的行為。狀態模式將依賴於狀態的行為分離成了各種狀態類,每一種特定的轉態類僅僅處理單一的行為。而且定義了各種狀態之間的轉移變遷關係。uml圖 主要包括 context 定義了client須要的介面,操作了乙個當前狀態類的引用 state 抽象的狀態類。...