六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

深入淺出Java設計之備忘錄模式

[摘要]一、引子   俗話說:世上難買后悔藥。所以凡事講究個“三思而后行”,但總常見有人做“痛心疾首”狀:當初我要是……。如果真的有《大話西游》中能時光倒流的“月光寶盒”,那這世上也許會少一些傷感與后悔——當然這只能是癡人說夢了。   但是在我們手指下的程序世界里,卻有的后悔藥買。今天我們要講的備忘錄模式...
 一、引子

  俗話說:世上難買后悔藥。所以凡事講究個“三思而后行”,但總常見有人做“痛心疾首”狀:當初我要是……。如果真的有《大話西游》中能時光倒流的“月光寶盒”,那這世上也許會少一些傷感與后悔——當然這只能是癡人說夢了。

  但是在我們手指下的程序世界里,卻有的后悔藥買。今天我們要講的備忘錄模式便是程序世界里的“月光寶盒”。

  二、定義與結構

  備忘錄(Memento)模式又稱標記(Token)模式。GOF給備忘錄模式的定義為:在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復到原先保存的狀態(tài)。

  在講命令模式的時候,我們曾經(jīng)提到利用中間的命令角色可以實現(xiàn)undo、redo的功能。從定義可以看出備忘錄模式是專門來存放對象歷史狀態(tài)的,這對于很好的實現(xiàn)undo、redo功能有很大的幫助。所以在命令模式中undo、redo功能可以配合備忘錄模式來實現(xiàn)。

  其實單就實現(xiàn)保存一個對象在某一時刻的狀態(tài)的功能,還是很簡單的——將對象中要保存的屬性放到一個專門管理備份的對象中,需要的時候則調(diào)用約定好的方法將備份的屬性放回到原來的對象中去。但是你要好好看看為了能讓你的備份對象訪問到原對象中的屬性,是否意味著你就要全部公開或者包內(nèi)公開對象原本私有的屬性呢?如果你的做法已經(jīng)破壞了封裝,那么就要考慮重構一下了。

  備忘錄模式只是GOF對“恢復對象某時的原有狀態(tài)”這一問題提出的通用方案。因此在如何保持封裝性上——由于受到語言特性等因素的影響,備忘錄模式并沒有詳細描述,只是基于C++闡述了思路。那么基于Java的應用應該怎樣來保持封裝呢?我們將在實現(xiàn)一節(jié)里面討論。

  來看下“月光寶盒”備忘錄模式的組成部分:

  1) 備忘錄(Memento)角色:備忘錄角色存儲“備忘發(fā)起角色”的內(nèi)部狀態(tài)。“備忘發(fā)起角色”根據(jù)需要決定備忘錄角色存儲“備忘發(fā)起角色”的哪些內(nèi)部狀態(tài)。為了防止“備忘發(fā)起角色”以外的其他對象訪問備忘錄。備忘錄實際上有兩個接口,“備忘錄管理者角色”只能看到備忘錄提供的窄接口——對于備忘錄角色中存放的屬性是不可見的。“備忘發(fā)起角色”則能夠看到一個寬接口——能夠得到自己放入備忘錄角色中屬性。

  2) 備忘發(fā)起(Originator)角色:“備忘發(fā)起角色”創(chuàng)建一個備忘錄,用以記錄當前時刻它的內(nèi)部狀態(tài)。在需要時使用備忘錄恢復內(nèi)部狀態(tài)。

  3) 備忘錄管理者(Caretaker)角色:負責保存好備忘錄。不能對備忘錄的內(nèi)容進行操作或檢查。



主站蜘蛛池模板: 亚洲影院一区 | 日韩欧美91 | 日本zzzwww| 伊人久久综合影院首页 | 亚洲大尺度在线 | 速度与激情九 | 天天躁狠狠躁夜躁2021 | 午夜精品福利视频 | 欧美视频中文字幕 | 五月婷婷丁香网 | 亚洲福利视频网址 | 日韩午夜伦| 青草免费在线 | 青青国产成人久久91网站站 | 日日噜噜夜夜狠狠视频欧美人 | 青娱乐福利视频 | 日韩不卡在线观看 | 亚洲免费片| 天天做天天做天天综合网 | 在线视频国产一区 | 天天上天天干 | 五月亭亭激情五月 | 婷婷激情五月 | 青青草原1769久久免费播放 | 欧美综合在线视频 | 亚洲国产一区在线精选 | 天天操天天操天天操天天操 | 五月婷婷久 | 色一情一乱一伦 | 青青青青青国产免费手机看视频 | 综合久久久久综合体桃花网 | 日本午夜在线视频 | 天天综合天天综合色在线 | 天天干天天要 | 亚洲欧洲视频在线 | 青春草影院 | 中文天堂在线最新版在线www | 亚洲国产精品久久 | 午夜网站免费版在线观看 | 中文字幕在线视频在线看 | 四虎影院永久地址 |