<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                24.2 備忘錄模式的定義 備忘錄模式(Memento Pattern)提供了一種彌補真實世界缺陷的方法,讓“后悔藥”在程序的世界中真實可行,其定義如下: Without violating encapsulation,capture and externalize an object's internal state so that the object can be restored to this state later.(在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣以后就可將該對象恢復到原先保存的狀態。) 通俗地說,備忘錄模式就是一個對象的備份模式,提供了一種程序數據的備份方法,其通用類圖如圖24-4所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036986058.jpg) 圖24-4 備忘錄模式的通用類圖 我們來看看類圖中的三個角色。 ● Originator發起人角色 記錄當前時刻的內部狀態,負責定義哪些屬于備份范圍的狀態,負責創建和恢復備忘錄數據。 ● Memento備忘錄角色 負責存儲Originator發起人對象的內部狀態,在需要的時候提供發起人需要的內部狀態。 ● Caretaker備忘錄管理員角色 對備忘錄進行管理、保存和提供備忘錄。 備忘錄模式的通用代碼也非常簡單,我們先看發起人角色,如代碼清單24-8所示。 代碼清單24-8 發起人角色 public?class?Originator?{ ?????//內部狀態 ?????private?String?state?=?""; ????? ?????public?String?getState()?{ ?????????????return?state; ?????} ?????public?void?setState(String?state)?{ ?????????????this.state?=?state; ?????} ?????//創建一個備忘錄 ?????public?Memento?createMemento(){ ?????????????return?new?Memento(this.state); ?????} ?????//恢復一個備忘錄 ?????public?void?restoreMemento(Memento?_memento){ ?????????????this.setState(_memento.getState()); ?????} } 我相信你心里此刻有很多疑問,比如狀態是多個怎么辦?需要有多份備份怎么辦?如果你很著急的話,請看24.4節,但我建議你還是跟隨我一步一步地走,我們再來看備忘錄角色,如代碼清單24-9所示。 代碼清單24-9 備忘錄角色 public?class?Memento?{ ?????//發起人的內部狀態 ?????private?String?state?=?""; ?????//構造函數傳遞參數 ?????public?Memento(String?_state){ ?????????????this.state?=?_state; ?????} ?????public?String?getState()?{ ?????????????return?state; ?????} ?????public?void?setState(String?state)?{ ?????????????this.state?=?state; ?????} } 這是一個簡單的JavaBean,備忘錄管理者也是一個簡單的JavaBean,如代碼清單24-10所示。 代碼清單24-10 備忘錄管理員角色 public?class?Caretaker?{ ?????//備忘錄對象 ?????private?Memento?memento; ?????public?Memento?getMemento()?{ ?????????????return?memento; ?????} ?????public?void?setMemento(Memento?memento)?{ ?????????????this.memento?=?memento; ?????} } 這3個主要角色都很簡單,我們來看場景類如何調用,如代碼清單24-11所示。 代碼清單24-11 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//定義出發起人 ?????????????Originator?originator?=?new?Originator(); ?????????????//定義出備忘錄管理員 ?????????????Caretaker?caretaker?=?new?Caretaker(); ?????????????//創建一個備忘錄 ?????????????caretaker.setMemento(originator.createMemento()); ?????????????//恢復一個備忘錄 ?????????????originator.restoreMemento(caretaker.getMemento()); ?????} } 備忘錄模式就是這么簡單,真正使用備忘錄模式的時候可比這復雜得多。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看