您的位置:首页 > 编程语言 > Java开发

java-设计模式(行为型)-【备忘录模式】

2015-04-20 18:28 387 查看
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


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: