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

java设计模式第14弹--备忘录模式

2015-09-22 22:09 274 查看
一、备忘录模式定义

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态

二、备忘录模式的三个角色

1.备忘录角色

2.备忘录发起人角色

3.备忘录管理角色

package com.lkx.sjms.memento;

import javassist.compiler.ast.Member;

/***
* 备忘录角色发起者
* @author 素剑步青尘
*
*/
public class Originator {
private String state="on";

/**
* 程序开始,改变state状态为off
*/
public void start(){
state="off";
}

/**
* 创建一个备忘录角色
* @return
*/
public Memento createMemento(){
return new Memento(state);
}

/**
* 还原备忘录角色
*/
public void restoreMemento(Memento m){
this.setState(m.getState());
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

}


package com.lkx.sjms.memento;
/**
* 备忘录角色
* @author 素剑步青尘
*
*/
public class Memento {
private String state;

public Memento(String state){
this.state=state;
}
public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

}


package com.lkx.sjms.memento;
/**
* 备忘录管理角色
* @author 素剑步青尘
*
*/
public class Caretaker {
private Memento memento;

public Memento getMemento() {
return memento;
}

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

}


package com.lkx.sjms.memento;

public class demoTest {

/**
* @param args
*/
public static void main(String[] args) {

Originator originator = new Originator();
System.out.println("初始状态为:"+originator.getState());
System.out.println("开始把初始状态保存到备忘录中");
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());
System.out.println("保存介绍");

System.out.println("--------------------");
System.out.println("改变状态");
originator.start();
System.out.println("改变后的状态为:"+originator.getState());
System.out.println("--------------------");

System.out.println("----开始恢复----");
originator.setState(caretaker.getMemento().getState());

System.out.println("恢复后的状态为:"+originator.getState());

}

}


运营结果:

初始状态为:on

开始把初始状态保存到备忘录中

保存介绍

--------------------

改变状态

改变后的状态为:off

--------------------

----开始恢复----

恢复后的状态为:on

其实我觉得备忘录管理角色可以不要,比如我如下修改程序,也是可以实现恢复到初始状态的,这完全就没有用到备忘录管理角色

package com.lkx.sjms.memento;

public class demoTest {

/**
* @param args
*/
public static void main(String[] args) {

Originator originator = new Originator();
System.out.println("初始状态为:"+originator.getState());
System.out.println("开始把初始状态保存到备忘录中");
/*Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());*/
Memento  memento = originator.createMemento();//修改后

System.out.println("保存介绍");

System.out.println("--------------------");
System.out.println("改变状态");
originator.start();
System.out.println("改变后的状态为:"+originator.getState());
System.out.println("--------------------");

System.out.println("----开始恢复----");
//originator.setState(caretaker.getMemento().getState());//修改前
originator.setState(memento.getState());//修改后

System.out.println("恢复后的状态为:"+originator.getState());

}

}


运行结果和上面一样。不理解为什么非要加个管理角色,有人解答下我的疑问吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: