鍍金池/ 教程/ Java/ Java備忘錄模式
Java前端控制器模式
Java工廠設(shè)計模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計模式
Java空對象模式
Java數(shù)據(jù)訪問對象模式
Java訪問者模式
Java組合實體模式
Java服務(wù)定位器模式

Java備忘錄模式

備忘錄模式(Memento Pattern)用來恢復(fù)一個對象的狀態(tài)到以前的狀態(tài)。 備忘錄模式下屬于行為模式的類別。

實現(xiàn)實例

在這個示例中,備忘錄模式(Memento Pattern)使用三個操作者類。 Memento類中包含要恢復(fù)的對象的狀態(tài)。 創(chuàng)建者在Memento對象中創(chuàng)建和存儲狀態(tài),Caretaker對象負(fù)責(zé)從Memento中恢復(fù)對象狀態(tài)。在這個示例中,創(chuàng)建了以下幾個類:Memento,OriginatorCareTaker。

MementoPatternDemo這是一個演示類,它將使用CareTakerOriginator對象來顯示對象狀態(tài)的恢復(fù)。

備忘錄模式(Memento Pattern)示例的結(jié)構(gòu)如下圖所示 -

第1步

創(chuàng)建一個Memento類,其代碼如下-
Memento.java

public class Memento {
   private String state;

   public Memento(String state){
      this.state = state;
   }

   public String getState(){
      return state;
   }    
}

第2步

創(chuàng)建一個Originator類,其代碼如下-
Originator.java

public class Originator {
   private String state;

   public void setState(String state){
      this.state = state;
   }

   public String getState(){
      return state;
   }

   public Memento saveStateToMemento(){
      return new Memento(state);
   }

   public void getStateFromMemento(Memento memento){
      state = Memento.getState();
   }
}

第3步

創(chuàng)建一個CareTaker類,其代碼如下-
CareTaker.java

import java.util.ArrayList;
import java.util.List;

public class CareTaker {
   private List<Memento> mementoList = new ArrayList<Memento>();

   public void add(Memento state){
      mementoList.add(state);
   }

   public Memento get(int index){
      return mementoList.get(index);
   }
}

第4步

創(chuàng)建一個類-MementoPatternDemo并使用CareTakerOriginator對象。
MementoPatternDemo.java

public class MementoPatternDemo {
   public static void main(String[] args) {

      Originator originator = new Originator();
      CareTaker careTaker = new CareTaker();

      originator.setState("State #1");
      originator.setState("State #2");
      careTaker.add(originator.saveStateToMemento());

      originator.setState("State #3");
      careTaker.add(originator.saveStateToMemento());

      originator.setState("State #4");
      System.out.println("Current State: " + originator.getState());        

      originator.getStateFromMemento(careTaker.get(0));
      System.out.println("First saved State: " + originator.getState());
      originator.getStateFromMemento(careTaker.get(1));
      System.out.println("Second saved State: " + originator.getState());
   }
}

第5步

驗證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

Current State: State #4
First saved State: State #2
Second saved State: State #3