开发手册 欢迎您!
软件开发者资料库

设计模式 - 纪念图案

设计模式Memento模式 - 通过简单易用的步骤学习java设计模式:初学者教程,包含从工厂模式,抽象工厂,单例,构建器,原型,适配器,桥接器,过滤器,复合材料,装饰器开始的Java设计模式的完整知识外立面,Flyweight,代理,命令,口译员,迭代器,调解员,纪念品,观察员,状态,空对象,战略,模板,访客,MVC,前端控制器等。

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

实现

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

MementoPatternDemo ,我们的演示类,将使用 CareTaker Originator 对象来显示对象状态的恢复.

Memento Pattern UML Diagram

第1步

创建Memento类.

Memento.java

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

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

第3步

创建CareTaker类

CareTaker.java

import java.util.ArrayList;import java.util.List;public class CareTaker {   private List mementoList = new ArrayList();   public void add(Memento state){      mementoList.add(state);   }   public Memento get(int index){      return mementoList.get(index);   } }

步骤4

使用 CareTaker Originator 对象.

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

验证输出.

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