不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后可将该对象恢复到原先保存的状态
适用场合:功能较复杂,但需要维护或记录属性历史,或需要保存的属性只是众多属性的一小部分
Originator.java
package com.gary.designpattern.memento;
/**
* 发起人
* @author gary
*
*/
public class Originator {
//需要保存的属性
private String messageA;
private String messageB;
public String getMessageA() {
return messageA;
}
public void setMessageA(String messageA) {
this.messageA = messageA;
}
public String getMessageB() {
return messageB;
}
public void setMessageB(String messageB) {
this.messageB = messageB;
}
//创建备忘录
public Memento createMemento(){
Memento memento = new Memento();
//将信息保存到Memento对象
memento.setMessageA(messageA);
memento.setMessageB(messageB);
return memento;
}
//恢复备忘录
public void restoreMemento(Memento memento){
//恢复信息
messageA = memento.getMessageA();
messageB = memento.getMessageB();
}
@Override
public String toString() {
return "Originator [messageA=" + messageA + ", messageB=" + messageB + "]";
}
}
Memento.java
package com.gary.designpattern.memento;
/**
* 备忘录
* @author gary
*
*/
public class Memento {
//需要保存的属性
private String messageA;
private String messageB;
public String getMessageA() {
return messageA;
}
public void setMessageA(String messageA) {
this.messageA = messageA;
}
public String getMessageB() {
return messageB;
}
public void setMessageB(String messageB) {
this.messageB = messageB;
}
}
Caretaker.java
package com.gary.designpattern.memento;
/**
* 管理者
* @author gary
*
*/
public class Caretaker {
//备忘录
private Memento memento;
public void setMemento(Memento memento) {
this.memento = memento;
}
public Memento getMemento() {
return memento;
}
}
Test.java
package com.gary.designpattern.memento;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
//初始状态
originator.setMessageA("hello");
originator.setMessageB("world");
System.out.println("初始状态: ");
System.out.println(originator);
Caretaker caretaker = new Caretaker();
//保存状态,隐藏Originator实现细节
caretaker.setMemento(originator.createMemento());
originator.setMessageA("messageA has changed");
originator.setMessageB("messageB has changed");
System.out.println("改变后: ");
System.out.println(originator);
//恢复
originator.restoreMemento(caretaker.getMemento());
System.out.println("恢复后: ");
System.out.println(originator);
}
}
分享到:
相关推荐
23种设计模式之十七(行为模式)Memento模式
主要介绍了Java设计模式之备忘录模式(Memento模式)介绍,memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态,需要的朋友可以参考下
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 ...3.5 Memento模式 3.6 Mediator模式 3.7 Command模式 3.8 Visitor模式 3.9 Chain of Responsibility模式 3.10 Iterator模式 3.11 Interpreter模式 4 说明
Memento 模式 Observer 模式 State 模式 Strategy 模式 Template Method 模式 Visitor 模式 Guarded Suspension 模式 Producer Consumer 模式 Worker Thread 模式 Thread-Per-Message 模式 ...
备忘录模式(Memento) 用意:用来存储另一对象内部状态的快照。
设计模式精解- GoF 23 种设计模式解析附 C++实现源码 ...3.5 Memento模式 .................................................................................................................103 3.6 Mediator模
6.3.6 备忘录模式(memento模式) 6.3.7 迭代子模式(iterator模式) 6.3.8 访问者模式(visitor模式) 6.3.9 调停者模式(mediator模式) 6.3.10 状态模式(state模式) 第7章 工具篇 7.1 极限编程的集成...
主要介绍了C#备忘录模式(Memento Pattern),以一个支持回退操作的例子讲述了C#备忘模式的实现方法,需要的朋友可以参考下
3.5 Memento模式.............................73 3.6 Mediator模式..............................76 3.7 Command模式............................81 3.8 Visitor模式..................................87 ...
3.5 Memento模式...................................................................................................................73 3.6 Mediator模式.....................................................
3.5 Memento模式........................................... 3.6 Mediator模式............................................ 3.7 Command模式.......................................... 3.8 Visitor模式..........
3.5 Memento模式 .................................................................................................................103 3.6 Mediator模式.....................................................
C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式
C#面向对象设计模式 (行为型模式) Memento 备忘录模式 视频讲座下载
3.5 Memento模式...................................................................................................................73 3.6 Mediator模式......................................................
1 创建型模式 1.1 Factory 模式 1.2 AbstactFactory 模式 ...3.5 Memento 模式 3.6 Mediator 模式 3.7 Command 模式 3.8 Visitor 模式 3.9 Chain of Responsibility 模式 3.10 Iterator 模式 3.11 Interpreter 模式
3.5 Memento模式...................................................................................................................73 3.6 Mediator模式.....................................................