版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店前臺(tái)接待合同管理辦法
- 2025版跨境電商出口貨物物流代理及國(guó)際分撥合同3篇
- 2024年自行車(chē)修理店買(mǎi)賣(mài)協(xié)議3篇
- 車(chē)展中心消防系統(tǒng)升級(jí)投標(biāo)方案
- 親子教育房產(chǎn)交易樣本
- 醫(yī)療設(shè)備采購(gòu)招投標(biāo)避坑指南
- 2025CD光盤(pán)加工復(fù)制合同模板
- 2025年度餐飲管理合同主體變更及服務(wù)質(zhì)量協(xié)議3篇
- 博物館消防設(shè)施改造合同樣本
- 防洪控制工程合同范本
- 【8地星球期末】安徽省合肥市包河區(qū)智育聯(lián)盟校2023-2024學(xué)年八年級(jí)上學(xué)期期末地理試題(含解析)
- 【8物(科)期末】合肥市廬陽(yáng)區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末質(zhì)量檢測(cè)物理試卷
- 2023-2024學(xué)年滬教版(上海)七年級(jí)數(shù)學(xué)上冊(cè) 期末復(fù)習(xí)題
- 國(guó)家安全知識(shí)教育
- 2024-2030年中國(guó)停車(chē)場(chǎng)建設(shè)行業(yè)發(fā)展趨勢(shì)投資策略研究報(bào)告
- 物業(yè)管理重難點(diǎn)分析及解決措施
- 湖北省咸寧市通城縣2022-2023學(xué)年八年級(jí)上學(xué)期期末質(zhì)量檢測(cè)數(shù)學(xué)試卷(含解析)
- 3.5畝生態(tài)陵園建設(shè)項(xiàng)目可行性研究報(bào)告
- 國(guó)家開(kāi)放大學(xué)24237丨學(xué)前兒童語(yǔ)言教育活動(dòng)指導(dǎo)(統(tǒng)設(shè)課)期末終考題庫(kù)及答案
- 北京郵電大學(xué)《數(shù)據(jù)庫(kù)系統(tǒng)》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024-2030年中國(guó)離合器制造行業(yè)運(yùn)行動(dòng)態(tài)及投資發(fā)展前景預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論