<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      備忘錄模式

      備忘錄(Memento、Snapshot)模式屬于行為型模式的一種。

      備忘錄模式主要用于捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),以便在將來的某個(gè)時(shí)候恢復(fù)此狀態(tài)。

      備忘錄模式的核心思想是將對(duì)象的狀態(tài)保存在一個(gè)獨(dú)立的對(duì)象中,這樣既能保持對(duì)象的封裝性,又能方便地恢復(fù)對(duì)象到之前的狀態(tài)。

      我們使用的幾乎所有軟件都用到了備忘錄模式。大多數(shù)軟件提供的保存、打開,以及編輯過程中的Undo、Redo都是備忘錄模式的應(yīng)用。Java的序列化也可以看作是備忘錄模式。

      備忘錄模式適合在有撤銷操作、恢復(fù)狀態(tài)、對(duì)象狀態(tài)追蹤等場(chǎng)景下使用。

      備忘錄模式通常有以下組成部分:

      • Memento(備忘錄):存儲(chǔ)對(duì)象的內(nèi)部狀態(tài)。備忘錄通常是一個(gè)不可變的對(duì)象,即在創(chuàng)建之后不允許更改它的內(nèi)容。
      • Originator(發(fā)起人):發(fā)起人是需要保存其狀態(tài)的對(duì)象。它創(chuàng)建一個(gè)備忘錄,保存當(dāng)前的狀態(tài),并可以通過備忘錄恢復(fù)到之前的狀態(tài)。發(fā)起人負(fù)責(zé)生成和恢復(fù)備忘錄,但它對(duì)備忘錄的內(nèi)部狀態(tài)一無所知。
      • Caretaker(看護(hù)者):看護(hù)者負(fù)責(zé)保存?zhèn)渫洠荒苄薷膫渫浀膬?nèi)容。看護(hù)者是一個(gè)管理者,通常用于保存多個(gè)備忘錄的狀態(tài),供需要時(shí)進(jìn)行恢復(fù)。

      如果我們使用的編程語言支持嵌套類(如Java、C++、 C# 等),則可將備忘錄嵌套在Originator類中; 如果不支持(如PHP等), 那么我們可以從備忘錄類中抽取一個(gè)空接口,然后讓其他所有對(duì)象通過接口來引用備忘錄。 我們還可以在該接口中添加一些元數(shù)據(jù)操作,但不能暴露Originator類的狀態(tài)。

      我們用備忘錄模式實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文本編輯器中的撤銷功能。當(dāng)用戶輸入文本時(shí),編輯器會(huì)保存當(dāng)前文本狀態(tài),這樣當(dāng)用戶點(diǎn)擊“撤銷”按鈕時(shí),編輯器能夠恢復(fù)到上一個(gè)狀態(tài)。

      1、Memento: 備忘錄類

      // Memento: 備忘錄類
      class Memento {
          private String state;
      
          public Memento(String state) {
              this.state = state;
          }
      
          public String getState() {
              return state;
          }
      }

      2、Originator: 發(fā)起人類

      // Originator: 發(fā)起人類
      class TextEditor {
          private String text;
      
          public void setText(String text) {
              this.text = text;
          }
      
          public String getText() {
              return text;
          }
      
          // 創(chuàng)建備忘錄
          public Memento saveToMemento() {
              return new Memento(text);
          }
      
          // 恢復(fù)狀態(tài)
          public void restoreFromMemento(Memento memento) {
              this.text = memento.getState();
          }
      }

      3、Caretaker: 看護(hù)者類

      // Caretaker: 看護(hù)者類
      class TextEditorHistory {
          private List<Memento> mementoList = new ArrayList<>();
      
          // 保存?zhèn)渫?    public void addMemento(Memento memento) {
              mementoList.add(memento);
          }
      
          // 獲取特定索引的備忘錄
          public Memento getMemento(int index) {
              return mementoList.get(index);
          }
      }

      4、客戶端

      // 客戶端代碼
      public class MementoPatternDemo {
          public static void main(String[] args) {
              TextEditor editor = new TextEditor();
              TextEditorHistory history = new TextEditorHistory();
      
              editor.setText("Hello");
              history.addMemento(editor.saveToMemento()); // 保存當(dāng)前狀態(tài)
      
              editor.setText("Hello, World!");
              history.addMemento(editor.saveToMemento()); // 保存當(dāng)前狀態(tài)
      
              editor.setText("Hello, World! How are you?");
              System.out.println("Current Text: " + editor.getText());
      
              // 恢復(fù)到上一個(gè)狀態(tài)
              editor.restoreFromMemento(history.getMemento(1));
              System.out.println("After undo: " + editor.getText());
      
              // 恢復(fù)到最初狀態(tài)
              editor.restoreFromMemento(history.getMemento(0));
              System.out.println("After undo again: " + editor.getText());
          }
      }

      備忘錄模式的優(yōu)缺點(diǎn)

      優(yōu)點(diǎn):

      • 保持封裝性:備忘錄模式允許將對(duì)象的狀態(tài)保存在外部,但不暴露對(duì)象的內(nèi)部實(shí)現(xiàn)。發(fā)起人對(duì)象可以將狀態(tài)保存在備忘錄中,而無需讓其他對(duì)象直接訪問內(nèi)部狀態(tài)。
      • 簡(jiǎn)化恢復(fù)操作:通過備忘錄,系統(tǒng)可以輕松地將對(duì)象恢復(fù)到之前的狀態(tài),而無需手動(dòng)追蹤每個(gè)狀態(tài)的變更。
      • 支持多次恢復(fù):可以創(chuàng)建多個(gè)備忘錄對(duì)象,用于在不同的時(shí)刻恢復(fù)到不同的狀態(tài)。

      缺點(diǎn):

      • 增加了系統(tǒng)的復(fù)雜性:備忘錄模式涉及多個(gè)對(duì)象的協(xié)作,可能會(huì)導(dǎo)致系統(tǒng)設(shè)計(jì)更加復(fù)雜。
      • 內(nèi)存消耗大:每次狀態(tài)變更都會(huì)創(chuàng)建一個(gè)新的備忘錄,這可能導(dǎo)致內(nèi)存消耗較大,尤其是狀態(tài)變化頻繁時(shí)。
      • 備忘錄管理問題:如果管理不當(dāng),備忘錄可能會(huì)堆積成大量的無用對(duì)象,需要額外的清理策略。

      我們可以同時(shí)使用命令模式備忘錄模式來實(shí)現(xiàn) “撤銷”功能。命令用于對(duì)目標(biāo)對(duì)象執(zhí)行各種不同的操作,備忘錄用來保存一條命令執(zhí)行前該對(duì)象的狀態(tài)。

      人生的確充滿艱難險(xiǎn)阻,但回蕩不息的主旋律,是不期而遇的溫暖和生生不息的希望。-- 煙沙九洲

      posted @ 2025-02-11 22:50  煙沙九洲  閱讀(213)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲国产综合性亚洲综合性| 国产日韩精品欧美一区灰| 人妻少妇偷人无码视频| 国产v综合v亚洲欧美大天堂| 国色天香成人一区二区| 亚洲国产区男人本色vr| 最新国产精品拍自在线播放| 亚洲不卡一区三区三区四| 性欧美三级在线观看| 综合色一色综合久久网| 无码人妻精品一区二区在线视频| 国产真人无遮挡免费视频| 欧美深度肠交惨叫| 九九热热久久这里只有精品| 福利一区二区在线观看| 亚洲精品日韩在线丰满| 免费大片av手机看片高清| 久久香蕉国产线看观看亚洲片| 五大连池市| 无码专区 人妻系列 在线| 午夜福利在线观看6080| 未满十八18禁止免费无码网站| 日韩黄色av一区二区三区| 好爽毛片一区二区三区四| 久久免费精品国自产拍网站| 九九热在线精品免费视频| 四虎成人精品永久网站| 全国最大成人网| 亚洲男人第一无码av网站| 国产精品露脸3p普通话| 无码中文字幕人妻在线一区二区三区 | 色老头亚洲成人免费影院| 午夜夫妻试看120国产| 中文字幕有码高清日韩| 国产v综合v亚洲欧美久久| 一亚洲一区二区中文字幕| av深夜免费在线观看| 精品人妻中文字幕av| 色一情一乱一区二区三区码| 1000部拍拍拍18勿入免费视频| 中文字幕日韩有码国产|