設(shè)計(jì)模式備忘錄模式學(xué)習(xí)教案_第1頁(yè)
設(shè)計(jì)模式備忘錄模式學(xué)習(xí)教案_第2頁(yè)
設(shè)計(jì)模式備忘錄模式學(xué)習(xí)教案_第3頁(yè)
設(shè)計(jì)模式備忘錄模式學(xué)習(xí)教案_第4頁(yè)
設(shè)計(jì)模式備忘錄模式學(xué)習(xí)教案_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、會(huì)計(jì)學(xué)1設(shè)計(jì)模式設(shè)計(jì)模式(msh)備忘錄模式備忘錄模式(msh)第一頁(yè),共26頁(yè)。取出事先保存的歷史狀態(tài)來(lái)覆蓋當(dāng)前狀態(tài)第2頁(yè)/共26頁(yè)第二頁(yè),共26頁(yè)。備忘錄模式:備忘錄模式:在不破壞封裝的前提下在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),這樣就可以在以后可以在以后將對(duì)象恢復(fù)到原先保存的狀態(tài)將對(duì)象恢復(fù)到原先保存的狀態(tài)。Memento Pattern: Without violating encapsulation, capture and externalize an objects internal state so that the object can be

2、 restored to this state later.第3頁(yè)/共26頁(yè)第三頁(yè),共26頁(yè)。第4頁(yè)/共26頁(yè)第四頁(yè),共26頁(yè)。第5頁(yè)/共26頁(yè)第五頁(yè),共26頁(yè)。第6頁(yè)/共26頁(yè)第六頁(yè),共26頁(yè)。namespace MementoSample public class Originator private string state; public Originator(string state) this.state = state; / 創(chuàng)建一個(gè)備忘錄對(duì)象創(chuàng)建一個(gè)備忘錄對(duì)象 internal Memento CreateMemento() return new Memento(this);

3、/ 根據(jù)備忘錄對(duì)象恢復(fù)原發(fā)器狀態(tài)根據(jù)備忘錄對(duì)象恢復(fù)原發(fā)器狀態(tài) internal void RestoreMemento(Memento m) state = m.GetState(); public void SetState(string state) this.state=state; public string GetState() return this.state; 第7頁(yè)/共26頁(yè)第七頁(yè),共26頁(yè)。namespace MementoSample /備忘錄類(lèi),默認(rèn)可見(jiàn)性備忘錄類(lèi),默認(rèn)可見(jiàn)性,在在程序程序集內(nèi)可見(jiàn)集內(nèi)可見(jiàn) internal class Memento private s

4、tring state; internal Memento(Originator o) state = o.GetState(); internal void SetState(string state) this.state = state; internal string GetState() return this.state; 第8頁(yè)/共26頁(yè)第八頁(yè),共26頁(yè)。n理想的情況是只允許(ynx)生成該備忘錄的原發(fā)器訪問(wèn)備忘錄的內(nèi)部狀態(tài)第9頁(yè)/共26頁(yè)第九頁(yè),共26頁(yè)。訪問(wèn)備忘錄中的數(shù)據(jù),其他對(duì)象都無(wú)法使用備忘錄中的數(shù)據(jù)第10頁(yè)/共26頁(yè)第十頁(yè),共26頁(yè)。namespace MementoS

5、ample public class Caretaker private Memento memento; internal Memento GetMemento() return memento; internal void SetMemento(Memento memento) this.memento = memento; 第11頁(yè)/共26頁(yè)第十一頁(yè),共26頁(yè)。using System;namespace MementoSample class Program static void Main(string args) /創(chuàng)建原發(fā)器對(duì)象創(chuàng)建原發(fā)器對(duì)象 Originator ori = n

6、ew Originator(狀態(tài)狀態(tài)(1); Console.WriteLine(ori.GetState(); /創(chuàng)建負(fù)責(zé)人對(duì)象,保存創(chuàng)建的備忘錄對(duì)象創(chuàng)建負(fù)責(zé)人對(duì)象,保存創(chuàng)建的備忘錄對(duì)象 Caretaker ct = new Caretaker(); ct.SetMemento(ori.CreateMemento(); ori.SetState(狀態(tài)狀態(tài)(2); Console.WriteLine(ori.GetState(); /從負(fù)責(zé)人對(duì)象中取出備忘錄對(duì)象,實(shí)現(xiàn)撤銷(xiāo)從負(fù)責(zé)人對(duì)象中取出備忘錄對(duì)象,實(shí)現(xiàn)撤銷(xiāo) ori.RestoreMemento(ct.GetMemento(); Consol

7、e.WriteLine(ori.GetState(); Console.Read(); 狀態(tài)(1)狀態(tài)(2)狀態(tài)(1)第12頁(yè)/共26頁(yè)第十二頁(yè),共26頁(yè)。某軟件公司要使用C#語(yǔ)言開(kāi)發(fā)一款可以運(yùn)行在Windows Phone移動(dòng)平臺(tái)的觸摸式中國(guó)象棋軟件,由于考慮到有些用戶(hù)是“菜鳥(niǎo)”,經(jīng)常不小心走錯(cuò)棋;還有些用戶(hù)因?yàn)椴涣?xí)慣使用手指在手機(jī)屏幕上拖動(dòng)棋子,常常出現(xiàn)操作失誤,因此該中國(guó)象棋軟件要提供“悔棋”功能,在用戶(hù)走錯(cuò)棋或操作失誤后可恢復(fù)到前一個(gè)步驟。如下圖所示: 中國(guó)象棋軟件界面示意圖中國(guó)象棋軟件界面示意圖為了實(shí)現(xiàn)“悔棋”功能,現(xiàn)使用備忘錄模式來(lái)設(shè)計(jì)該中國(guó)象棋軟件。第13頁(yè)/共26頁(yè)第十三頁(yè),共

8、26頁(yè)。中國(guó)象棋棋子中國(guó)象棋棋子(qz)撤銷(xiāo)功能結(jié)構(gòu)圖撤銷(xiāo)功能結(jié)構(gòu)圖第14頁(yè)/共26頁(yè)第十四頁(yè),共26頁(yè)。演示演示參考參考(cnko)代碼代碼 (DesignPatternMementoSample)第15頁(yè)/共26頁(yè)第十五頁(yè),共26頁(yè)。第16頁(yè)/共26頁(yè)第十六頁(yè),共26頁(yè)。重做(Redo)或恢復(fù)操作,即取消撤銷(xiāo),讓對(duì)象狀態(tài)得到恢復(fù)第17頁(yè)/共26頁(yè)第十七頁(yè),共26頁(yè)。改進(jìn)之后的中國(guó)象棋棋子撤銷(xiāo)改進(jìn)之后的中國(guó)象棋棋子撤銷(xiāo)(chxio)功能結(jié)構(gòu)圖功能結(jié)構(gòu)圖第18頁(yè)/共26頁(yè)第十八頁(yè),共26頁(yè)。using System.Collections;namespace MementoSample pub

9、lic class MementoCaretaker /定義一個(gè)集合來(lái)存儲(chǔ)多個(gè)備忘錄定義一個(gè)集合來(lái)存儲(chǔ)多個(gè)備忘錄 private ArrayList mementolist = new ArrayList(); internal ChessmanMemento GetMemento(int i) return (ChessmanMemento)mementolisti; internal void SetMemento(ChessmanMemento memento) mementolist.Add(memento); 第19頁(yè)/共26頁(yè)第十九頁(yè),共26頁(yè)。演示演示參考參考(cnko)代碼代碼 (DesignPatternMementoExtend)第20頁(yè)/共26頁(yè)第二十頁(yè),共26頁(yè)。(di

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論