个性化阅读
专注于IT技术分析

备忘录模式

本文概述

备忘录模式说“将对象的状态恢复到其先前的状态”。但是它必须做到这一点而不会违反封装。这种情况在发生错误或故障时很有用。

备忘录模式也称为令牌。

撤消或退格或Ctrl + Z是编辑器中最常用的操作之一。 Memento设计模式用于实现撤消操作。这是通过在对象更改状态时保存其当前状态来完成的。


好处

  • 它保留封装边界。
  • 它简化了创建者。

用法

  • 大多数软件在撤消和重做操作中使用它。
  • 它也用于数据库事务中。

UML for Memento模式

备忘录模式

备忘录:

  • 存储原始对象的内部状态。状态可以包括任意数量的状态变量。
  • 备忘录必须具有两个接口, 即看守者的接口。该接口不得允许任何操作或对内存的存储的内部状态的任何访问, 并因此保持封装。另一个接口是发起者, 它允许发起者访问发起者恢复先前状态所必需的任何状态变量。

鼻祖:

  • 创建一个备忘录对象, 该对象将捕获发起者的内部状态。
  • 使用memento对象恢复其先前状态。

看守:

  • 负责保留备忘录。
  • 备忘录对看守人是透明的, 看守人不得对其进行操作。

Memento模式的实现

步骤1:

创建一个Originator类, 该类将使用Memento对象恢复其先前状态。

//This is a class.

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();
	   }
}// End of the Originator class.

第2步:

创建一个Memento类, 该类将存储Originator对象的内部状态。

//This is a class.

public class Memento {
	
	private String state;

	public Memento(String state) {
		this.state=state;
	}
	public String getState() {
		return state;
	}
	
}// End of the Memento class.

第三步:

创建一个负责维护Memento的Caretaker类。

//This is a class.

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

}// End of the Caretaker class.

步骤4:

创建一个MementoPatternDemo类。

//This is a class.


public class MementoPatternDemo {
	
	public static void main(String[] args) {
		
	      Originator originator = new Originator();
	      
	      Caretaker careTaker = new Caretaker();
	      
	      originator.setState("State #1");
	      careTaker.add(originator.saveStateToMemento());
	      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());
	      originator.getStateFromMemento(careTaker.get(2));
	      System.out.println("Third saved State: " + originator.getState());
	   }

}
// End of the MementoPatternDemo class.

输出:

备忘录模式
赞(0)
未经允许不得转载:srcmini » 备忘录模式

评论 抢沙发

评论前必须登录!