24 第24章 狀態(tài)模式

24 第24章 狀態(tài)模式

ID:5182537

大小:1.28 MB

頁數(shù):30頁

時間:2017-11-27

24 第24章 狀態(tài)模式_第1頁
24 第24章 狀態(tài)模式_第2頁
24 第24章 狀態(tài)模式_第3頁
24 第24章 狀態(tài)模式_第4頁
24 第24章 狀態(tài)模式_第5頁
資源描述:

《24 第24章 狀態(tài)模式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、第24章狀態(tài)模式劉偉weiliu_china@yahoo.cn本章教學(xué)內(nèi)容狀態(tài)模式模式動機與定義模式結(jié)構(gòu)與分析模式實例與解析模式效果與應(yīng)用模式擴展狀態(tài)模式模式動機在很多情況下,一個對象的行為取決于一個或多個動態(tài)變化的屬性,這樣的屬性叫做狀態(tài),這樣的對象叫做有狀態(tài)的(stateful)對象,這樣的對象狀態(tài)是從事先定義好的一系列值中取出的。當一個這樣的對象與外部事件產(chǎn)生互動時,其內(nèi)部狀態(tài)就會改變,從而使得系統(tǒng)的行為也隨之發(fā)生變化。在UML中可以使用狀態(tài)圖來描述對象狀態(tài)的變化。狀態(tài)模式模式動機狀態(tài)模式模式定義狀態(tài)模式(StatePattern):允許一個對象在其

2、內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它的類。其別名為狀態(tài)對象(ObjectsforStates),狀態(tài)模式是一種對象行為型模式。狀態(tài)模式模式定義StatePattern:Allowanobjecttoalteritsbehaviorwhenitsinternalstatechanges.Theobjectwillappeartochangeitsclass.Frequencyofuse:medium狀態(tài)模式模式結(jié)構(gòu)狀態(tài)模式模式結(jié)構(gòu)狀態(tài)模式包含如下角色:Context:環(huán)境類State:抽象狀態(tài)類ConcreteState:具體狀態(tài)類狀態(tài)模式模式

3、分析狀態(tài)模式描述了對象狀態(tài)的變化以及對象如何在每一種狀態(tài)下表現(xiàn)出不同的行為。狀態(tài)模式的關(guān)鍵是引入了一個抽象類來專門表示對象的狀態(tài),這個類我們叫做抽象狀態(tài)類,而對象的每一種具體狀態(tài)類都繼承了該類,并在不同具體狀態(tài)類中實現(xiàn)了不同狀態(tài)的行為,包括各種狀態(tài)之間的轉(zhuǎn)換。狀態(tài)模式模式分析狀態(tài)模式模式分析不使用狀態(tài)模式:……if(state=="空閑"){if(預(yù)訂房間){預(yù)訂操作;state="已預(yù)訂";}elseif(住進房間){入住操作;state="已入住";}}elseif(state=="已預(yù)訂"){if(住進房間){入住操作;state="已入住";}el

4、seif(取消預(yù)訂){取消操作;state="空閑";}}……狀態(tài)模式模式分析狀態(tài)模式模式分析使用狀態(tài)模式重構(gòu)之后的代碼://重構(gòu)之后的“空閑狀態(tài)類”示例代碼……if(預(yù)訂房間){預(yù)訂操作;context.setState(new已預(yù)訂狀態(tài)類());}elseif(住進房間){入住操作;context.setState(new已入住狀態(tài)類());}……狀態(tài)模式模式分析在狀態(tài)模式結(jié)構(gòu)中需要理解環(huán)境類與抽象狀態(tài)類的作用:環(huán)境類實際上就是擁有狀態(tài)的對象,環(huán)境類有時候可以充當狀態(tài)管理器(StateManager)的角色,可以在環(huán)境類中對狀態(tài)進行切換操作。抽象狀態(tài)類

5、可以是抽象類,也可以是接口,不同狀態(tài)類就是繼承這個父類的不同子類,狀態(tài)類的產(chǎn)生是由于環(huán)境類存在多個狀態(tài),同時還滿足兩個條件:這些狀態(tài)經(jīng)常需要切換,在不同的狀態(tài)下對象的行為不同。因此可以將不同對象下的行為單獨提取出來封裝在具體的狀態(tài)類中,使得環(huán)境類對象在其內(nèi)部狀態(tài)改變時可以改變它的行為,對象看起來似乎修改了它的類,而實際上是由于切換到不同的具體狀態(tài)類實現(xiàn)的。由于環(huán)境類可以設(shè)置為任一具體狀態(tài)類,因此它針對抽象狀態(tài)類進行編程,在程序運行時可以將任一具體狀態(tài)類的對象設(shè)置到環(huán)境類中,從而使得環(huán)境類可以改變內(nèi)部狀態(tài),并且改變行為。狀態(tài)模式狀態(tài)模式實例與解析實例一:論壇

6、用戶等級在某論壇系統(tǒng)中,用戶可以發(fā)表留言,發(fā)表留言將增加積分;用戶也可以回復(fù)留言,回復(fù)留言也將增加積分;用戶還可以下載文件,下載文件將扣除積分。該系統(tǒng)用戶分為三個等級,分別是新手、高手和專家,這三個等級對應(yīng)三種不同的狀態(tài),這三種狀態(tài)分別定義如下:(1)如果積分小于100分,則為新手狀態(tài),用戶可以發(fā)表留言、回復(fù)留言,但是不能下載文件。如果積分大于等于1000分,則轉(zhuǎn)換為專家狀態(tài);如果積分大于等于100分,則轉(zhuǎn)換為高手狀態(tài)。(2)如果積分大于等于100分但小于1000分,則為高手狀態(tài),用戶可以發(fā)表留言、回復(fù)留言,還可以下載文件,而且用戶在發(fā)表留言時可以獲取雙倍

7、積分。如果積分小于100分,則轉(zhuǎn)換為新手狀態(tài);如果積分大于等于1000分,則轉(zhuǎn)換為專家狀態(tài);如果下載文件后積分小于0,則不能下載該文件。(3)如果積分大于等于1000分,則為專家狀態(tài),用戶可以發(fā)表留言、回復(fù)留言和下載文件,用戶除了在發(fā)表留言時可以獲取雙倍積分外,下載文件只扣除所需積分的一半。如果積分小于100分,則轉(zhuǎn)換為新手狀態(tài);如果積分小于1000分,但大于等于100,則轉(zhuǎn)換為高手狀態(tài);如果下載文件后積分小于0,則不能下載該文件。狀態(tài)模式狀態(tài)模式實例與解析實例一:論壇用戶等級狀態(tài)模式狀態(tài)模式實例與解析實例一:論壇用戶等級參考代碼(Chapter24Sta

8、tesample01)演示……狀態(tài)模式狀態(tài)模式實例與解析實例二:

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。