HeadFir st 设计模式学习笔记22-- 备忘录(M emento)模式拾零
2013-07-22 00:14
441 查看
HeadFir st 设计模式学习笔记22-- 备忘录(M emento)模式拾零
1.概述
这个模式也比较简单,书中没有提到。用于恢复上次操作结果等场景,比如数据库回滚等。这
个模式有三个参与的实体:
Ori gi n ator:知道如何保存自己的对象。
Caretaker:知道Ori gi n ator何时以及为何保存并恢复自己的对象。
Memen to:由Ori gi n ator进行读写,并且Caretaker完成维护的对象
2.实例
首先,我们创建⼀个Memen to:
1: class Memento {
2: private String state;
3:
4: public Memento(String stateToSave) { state = stateToSave; }
5: public String getSavedState() { return state; }
6: }
7:
8:
里面有我们希望保存的状态的存取方法。
然后我们创建Ori gi n ator:
1: class Originator {
2: private String state;
3: /* lots of memory consumptive private data that is not necessary to defin
4: * state and should thus not be saved. Hence the small memento object. */
5:
6: public void set(String state) {
7: System.out.println("Originator: Setting state to "+state);
8: this.state = state;
9: }
10:
11: public Memento saveToMemento() {
12: System.out.println("Originator: Saving to Memento.");
13: return new Memento(state);
14: }
15: public void restoreFromMemento(Memento m) {
16: state = m.getSavedState();
17: System.out.println("Originator: State after restoring from Memento:
18: }
19: }
20:
提供了保存状态、恢复状态以及设置状态的接口。
最后我们再实现Caretaker:
1: class Caretaker {
2: private ArrayList savedStates = new ArrayList();
3:
4: public void addMemento(Memento m) { savedStates.add(m); }
5: public Memento getMemento(int index) { return savedStates.get(index); }
6: }
7:
在这里面提供了对Memen to的维护的相关存取接口。
到此,我们就可以写⼀段测试程序来看看这个备忘录模式是不是能正常工作:
1: class MementoExample {
2: public static void main(String[] args) {
3: Caretaker caretaker = new Caretaker();
4:
5: Originator originator = new Originator();
6: originator.set("State1");
7: originator.set("State2");
8: caretaker.addMemento( originator.saveToMemento() );
9: originator.set("State3");
10: caretaker.addMemento( originator.saveToMemento() );
11: originator.set("State4");
12:
13: originator.restoreFromMemento( caretaker.getMemento(1) );
14: }
15: }
16:
17:
18:
3.UML
1.概述
这个模式也比较简单,书中没有提到。用于恢复上次操作结果等场景,比如数据库回滚等。这
个模式有三个参与的实体:
Ori gi n ator:知道如何保存自己的对象。
Caretaker:知道Ori gi n ator何时以及为何保存并恢复自己的对象。
Memen to:由Ori gi n ator进行读写,并且Caretaker完成维护的对象
2.实例
首先,我们创建⼀个Memen to:
1: class Memento {
2: private String state;
3:
4: public Memento(String stateToSave) { state = stateToSave; }
5: public String getSavedState() { return state; }
6: }
7:
8:
里面有我们希望保存的状态的存取方法。
然后我们创建Ori gi n ator:
1: class Originator {
2: private String state;
3: /* lots of memory consumptive private data that is not necessary to defin
4: * state and should thus not be saved. Hence the small memento object. */
5:
6: public void set(String state) {
7: System.out.println("Originator: Setting state to "+state);
8: this.state = state;
9: }
10:
11: public Memento saveToMemento() {
12: System.out.println("Originator: Saving to Memento.");
13: return new Memento(state);
14: }
15: public void restoreFromMemento(Memento m) {
16: state = m.getSavedState();
17: System.out.println("Originator: State after restoring from Memento:
18: }
19: }
20:
提供了保存状态、恢复状态以及设置状态的接口。
最后我们再实现Caretaker:
1: class Caretaker {
2: private ArrayList savedStates = new ArrayList();
3:
4: public void addMemento(Memento m) { savedStates.add(m); }
5: public Memento getMemento(int index) { return savedStates.get(index); }
6: }
7:
在这里面提供了对Memen to的维护的相关存取接口。
到此,我们就可以写⼀段测试程序来看看这个备忘录模式是不是能正常工作:
1: class MementoExample {
2: public static void main(String[] args) {
3: Caretaker caretaker = new Caretaker();
4:
5: Originator originator = new Originator();
6: originator.set("State1");
7: originator.set("State2");
8: caretaker.addMemento( originator.saveToMemento() );
9: originator.set("State3");
10: caretaker.addMemento( originator.saveToMemento() );
11: originator.set("State4");
12:
13: originator.restoreFromMemento( caretaker.getMemento(1) );
14: }
15: }
16:
17:
18:
3.UML
相关文章推荐
- HeadFir st 设计模式学习笔记18--中介者(M ediator)模式拾零
- HeadFir st 设计模式学习笔记21-- 解释者(Inter pr eter)模式拾零
- HeadFirst 设计模式学习笔记22-- 备忘录(Memento)模式拾零
- HeadFir st 设计模式学习笔记11——状态模式
- 【HeadFirst 设计模式学习笔记】21 备忘录(Memento)模式拾零
- 【HeadFirst 设计模式学习笔记】19 桥接(Bridge)模式拾零
- HeadFirst 设计模式学习笔记20--桥接(Bridge)模式拾零
- 设计模式学习笔记--备忘录模式
- C#面向对象设计模式纵横谈 学习笔记22 State模式(行为型模式)
- java/android 设计模式学习笔记(22)---模板方法模式
- 【HeadFirst 设计模式学习笔记】 20 解释者(Interpreter)模式拾零
- java学习笔记-设计模式22(访问者模式)
- HeadFirst 设计模式学习笔记18--中介者(Mediator)模式拾零
- headfast设计模式学习笔记01
- 设计模式学习笔记——备忘录模式
- Head.First设计模式学习笔记
- 设计模式学习笔记十九:备忘录模式
- HeadFirst 设计模式学习笔记19--原型(Prototype)模式拾零
- 设计模式学习笔记——备忘录模式
- headfast设计模式学习笔记02 装饰者