目录

设计模式 - 纪念图案( Memento Pattern)

Memento模式用于将对象的状态恢复到先前的状态。 纪念品模式属于行为模式类别。

实现 (Implementation)

Memento模式使用三个actor类。 Memento包含要恢复的对象的状态。 Originator在Memento对象中创建和存储状态,Caretaker对象负责从Memento恢复对象状态。 我们创建了MementoOriginatorCareTaker

我们的演示类CareTaker将使用CareTakerOriginator对象来显示对象状态的恢复。

纪念图案UML图

Step 1

创建Memento类。

Memento.java

public class Memento {
   private String state;
   public Memento(String state){
      this.state = state;
   }
   public String getState(){
      return state;
   }	
}

Step 2

创建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();
   }
}

Step 3

创建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);
   }
}

Step 4

使用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());
   }
}

Step 5

验证输出。

Current State: State #4
First saved State: State #2
Second saved State: State #3
↑回到顶部↑
WIKI教程 @2018