标签:
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