http://alaric.iteye.com/blog/1931253
http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html
1.备忘录模式(Memento)
定义:主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些。
通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储
A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作
关系图:
2.举例
2.1 Original类:原始类:
//原始类 public class Original { //状态信息 private String state=""; //备忘录:保存状态信息 public Memento createMemento() { return new Memento(state); } public String getState() { return state; } //重置状态信息:从备忘录中重置 public void resetState(Memento memento) { System.out.print("重置-"); setState(memento.getState()); } public void setState(String state) { this.state = state; System.out.println("设置-状态:"+state); } } //备忘录:不可修改状态信息 class Memento { private String state=null; public String getState() { return state; } public Memento(String state) { this.state=state; } }
2.2 存储类:
//保存备忘录的存储类 public class Storage { private Memento memento=null; public Storage(Memento memento) { this.memento=memento; } public Memento getMemento() { return memento; } }
2.3 测试:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Original ori=new Original(); ori.setState("off"); //保存备忘录 Storage sto=new Storage(ori.createMemento()); //改变状态 ori.setState("on"); //重置状态 ori.resetState(sto.getMemento()); } }
2.4 运行结果:
设置-状态:off 设置-状态:on 重置-设置-状态:off
3. 黑箱操作(将备忘录以私有化内部类的形式定义,再通过一个接口给外界访问):
//原始类 public class Original { //状态信息 private String state=""; //备忘录:以内部类的方式保存信息,继承该接口,方便外界访问它 private class Memento implements MementoIF { public Memento(Original ori) { state=ori.state; } public String getState() { // TODO Auto-generated method stub return null; } } public Memento createMemento() { return new Memento(this); } public String getState() { return state; } //重置状态信息:从备忘录中重置 public void resetState(MementoIF memento) { System.out.print("重置-"); Memento mem=(Memento)memento ; setState(mem.getState()); } public void setState(String state) { this.state = state; System.out.println("设置-状态:"+state); } } //创建一个接口:方便外部对备忘录内部类的访问 interface MementoIF { }
测试:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Original ori=new Original(); ori.setState("off"); //保存备忘录 MementoIF memento=ori.createMemento(); //改变状态 ori.setState("on"); //重置状态 ori.resetState(memento); } }
结果:
设置-状态:off 设置-状态:on 重置-设置-状态:off
原文:http://www.cnblogs.com/beyondbycyx/p/4442331.html