日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Behavioral模式之Memento模式

發布時間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Behavioral模式之Memento模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.意圖

在不破壞封裝性的前提下,捕獲一個對象的內部狀態。并在該對象之外保存這個狀態,這樣以后就可將該對象恢復到原先保存的狀態。

2.別名

Token

3.動機

有時候有必要記錄一個對象的內部狀態。為了同意用戶取消不確定的操作或從錯誤中恢復過來,須要實現檢查點和取消機制,而要實現這些機制。你必須事先將狀態信息保存在某處,這樣才干是對象恢復到他們先前的狀態。

4.適用性

下面情況使用Memento模式:

  • 必需保存一個對象在某一時刻的(部分)狀態,這樣以后須要時它能恢復到先前的狀態。
  • 如果一個用接口來讓其他對象直接得到這些狀態。將會暴露對象的實現細節并破壞對象的封裝性。

5.結構

主要目的是保存一個對象的某個狀態,以便在適當的時候恢復對象,個人認為叫備份模式更形象些,通俗的講下:如果有原始類A。A中有各種屬性,A能夠決定須要備份的屬性,備忘錄類B是用來存儲A的一些內部狀態,類C呢。就是一個用來存儲備忘錄的。且僅僅能存儲,不能改動等操作。做個圖來分析一下:

6.代碼演示樣例

Original類是原始類。里面有須要保存的屬性value及創建一個備忘錄類。用來保存value值。Memento類是備忘錄類,Storage類是存儲備忘錄的類。持有Memento類的實例,該模式非常好理解。

直接看源代碼:
實現代碼:
數據結構:

public class Original {private String value;public String getValue() {return value;}public void setValue(String value) {this.value = value;}public Original(String value) {this.value = value;}public Memento createMemento(){return new Memento(value);}public void restoreMemento(Memento memento){this.value = memento.getValue();} }

實現:

public class Memento {private String value;public Memento(String value) {this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;} }public class Storage {private Memento memento;public Storage(Memento memento) {this.memento = memento;}public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento = memento;} } 測試類:

public class Test {

public static void main(String[] args) {// 創建原始類Original origi = new Original("egg");// 創建備忘錄Storage storage = new Storage(origi.createMemento());// 改動原始類的狀態System.out.println("初始化狀態為:" + origi.getValue());origi.setValue("niu");System.out.println("改動后的狀態為:" + origi.getValue());// 回復原始類的狀態origi.restoreMemento(storage.getMemento());System.out.println("恢復后的狀態為:" + origi.getValue()); }

}
“`
輸出:
初始化狀態為:egg
改動后的狀態為:niu
恢復后的狀態為:egg
簡單描寫敘述下:新建原始類時,value被初始化為egg,后經過改動,將value的值置為niu。最后倒數第二行進行恢復狀態,結果成功恢復了。事實上我認為這個模式叫“備份-恢復”模式最形象。

7.相關模式

  • Command模式:命令模式能夠使用備忘錄來為可撤銷的操作維護狀態。
  • Iterator模式:如前所述備忘錄可用于迭代。

引用:

http://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm
http://item.jd.com/10057319.html
http://blog.csdn.net/zhangerqing/article/details/8239539

總結

以上是生活随笔為你收集整理的Behavioral模式之Memento模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。