备忘录模式(Java)
下面是关于我所写的所有设计模式代码(还是建议自己手打或者想一个别的例子练习一次) (https://github.com/lihang212010/DesignPatterns-/tree/master/designpatterns/src)
先来张百度的UML
下面是我例子的UML 备忘录模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
一、备忘录模式的优点 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时, 使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需 要的这些状态的版本。 3、当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。 二.备忘录缺点 主要是消耗资源多,有时候需要建立多个备忘录
我的例子是一个成绩单,成绩单记录成绩,然后管理者保存到备忘录这个类中,在还原成绩,得到原来成绩。 这个例子只是为了演示如何使用备忘录模式,在实际应用中,属性不只是成绩这一个,备忘录也是有多个。 光一个UML不够具体,建议大家在看下代码
代码如下
成绩单
public class Originator {
private String state; //成绩
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento Create() { //创造备忘录
return new Memento(state);
}
public void SetMemento(Memento memento) { //还原
this.state=memento.getState();
}
public void show() {
System.out.println("当前分数"+state);
}
}
备忘录
public class Memento {
public String state;
public Memento(String state) {
this.state=state;
}
public String getState() {
System.out.println("正在还原");
return state;
}
}
管理者
public class Administration {
private Memento memento; //备忘录
public void setMemento(Originator originator) {
this.memento = originator.Create();
}
public Memento getMemento() {
return memento;
}
}
主方法
public class Main {
public static void main(String[] args) {
Originator originator=new Originator();
originator.setState("111");
originator.show();
Administration a=new Administration();
a.setMemento(originator);//设置备忘录
originator.setState("321");;
originator.show();
originator.SetMemento(a.getMemento());//还原数据
originator.show();
}
}
结果