编程语言 php java

java设计模式-备忘录模式Memen

java HTML我帮您 1年前  0次浏览
备忘录模式(Memento Pattern)用于恢复对象的状态到之前一个状态。备忘录模式属于表现型。
备忘录模式使用三种行为类。备忘录包含对象恢复的状态。Originator类在备忘录中创建和存储状态。。我们创建Memento,Originator和CareTaker。
Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值。Memento类是备忘录类,Storage类是存储备忘录的类,持有Memento类的实例,该模式很好理解。CareTaker对象负责从备忘录恢复对象状态即Storage类是存储备忘录集合。直接看源码:
package com.html580.memento;

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

class Memento {

private String value;

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

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}

class Original {

private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public Original(){
}

public Original(String value) {
this.value = value;
}

public Memento createMemento() {
return new Memento(value);
}

public void restoreMemento(Memento memento) {
this.value = memento.getValue();
}
}

class Storage {

private Memento memento;

public Storage(Memento memento) {
this.memento = memento;
}

public Memento getMemento() {
return memento;
}

public void setMemento(Memento memento) {
this.memento = memento;
}
}

class CareTaker {
private List mementoList = new ArrayList();

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

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

public class Client {
public static void main(String<> args) {

// 创建原始类
Original origi = new Original("html580");
// 创建备忘录
Storage storage = new Storage(origi.createMemento());

// 修改原始类的状态
System.out.println("初始化状态为:" + origi.getValue());
origi.setValue("html580.com");
System.out.println("修改后的状态为:" + origi.getValue());

// 回复原始类的状态
origi.restoreMemento(storage.getMemento());
System.out.println("恢复后的状态为:" + origi.getValue());


CareTaker careTaker = new CareTaker();
origi = new Original();
origi.setValue("設置值 #1");
origi.setValue("設置值 #2");
careTaker.add(origi.createMemento());
origi.setValue("設置值 #3");
careTaker.add(origi.createMemento());
origi.setValue("設置值 #4");
System.out.println("当前值: " + origi.getValue());
origi.restoreMemento(careTaker.get(0));
System.out.println("保存后的值: " + origi.getValue());
origi.restoreMemento(careTaker.get(1));
System.out.println("第二次保存的值: " + origi.getValue());
}
}
输出结果:
初始化状态为:html580
修改后的状态为:html580.com
恢复后的状态为:html580
当前值: 設置值 #4
保存后的值: 設置值 #2
第二次保存的值: 設置值 #3




发表评论