设计模式(18)------备忘录模式

来源:互联网 发布:男子遭遇网络诈骗 编辑:程序博客网 时间:2024/06/05 08:26

备忘录模式作用:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

这样以后就可以将对象状态恢复至保存时的状态。


应用场景:

(1)必须保存一个对象在某一时刻的状态,在需要时才能恢复至先前的状态。

(2)如果一个用接口来让其它对象直接得到这些对象状态,将会暴露对象的实现细节并破坏对象的封装性。


参与对象:

(1)Memento

备忘录存储原发器对象的内部状态。

(2)Originator

原发器创建一个备忘录,用于记录当前时刻的内部状态。

使用备忘录恢复内部状态。

(3)Caretaker

负责保存好备忘录,不能对备忘录的内部进行操作或检索。


eg:

Memento

package com.lanhuigu.base.design.behavior.memento;/** * Memento: 备忘录存储原发器对象的内部状态 */public class Memento {private String state;public Memento(String state) {// TODO Auto-generated constructor stubthis.state = state;}public String getState() {return state;}public void setState(String state) {this.state = state;}}

Originator

package com.lanhuigu.base.design.behavior.memento;/** * Originator: 原发器创建一个备忘录,用于记录当前时刻的内部状态 */public class Originator {private String state;public String getState() {return state;}public void setState(String state) {this.state = state;}public Memento createMemento() {return new Memento(state);}public void setMemento(Memento memento) {state = memento.getState();}public void showState() {System.out.println(state);}}

Caretaker

package com.lanhuigu.base.design.behavior.memento;/** * Caretaker: 负责保存好备忘录,不能对备忘录的内部进行操作或检索 */public class Caretaker {private Memento memento;public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento = memento;}}

Client:

package com.lanhuigu.base.design.behavior.memento;public class Test {public static void main(String[] args) {Originator originator = new Originator();originator.setState("某些人穷得叮当响的时候,把你当朋友");// 将数据封存到Caretaker中(穷的行为)Caretaker caretaker = new Caretaker();caretaker.setMemento(originator.createMemento());originator.showState();//富裕的行为originator.setState("某些人富得流油的时候,便把你当陌生人");originator.showState();// 将数据重新导入(恢复为一开始穷的行为)originator.setMemento(caretaker.getMemento());originator.showState();}}

运行结果:



0 0