博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 设计模式 备忘录模式
阅读量:6476 次
发布时间:2019-06-23

本文共 1188 字,大约阅读时间需要 3 分钟。

用途


 

备忘录模式 (Memento)
在不破坏封装性的前提下,
捕获一个对象的内部状态,并在该
对象之外保存这个状态
这样以后就可将该对象恢复到原先保存的状态。
备忘录模式是一种
行为型模式

 

结构

图-备忘录模式结构图

Memento : 负责存储 Originator 对象的内部状态,并可以防止 Originator 以外的其他对象访问 Memento。
Memento 有两个接口,Caretaker 只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。
Originator 可以看到一个宽接口,允许它访问返回到先前状态所需的所有数据。
class Memento {
    
private String state;
    
public Memento(String state) {
        
this.state = state;
    }
    
    
public String GetState() {
        
return state;
    }
}
Originator : 负责创建一个备忘录 Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。
Originator 可根据需要决定 Memento 存储 Originator 的哪些内部状态。
class Originator {
    
private String state;
    
    
public 
void SetState(String state) {
        
this.state = state;
    }
    
public String GetState() {
        
return state;
    }
    
    
public Memento CreateMemento() {
        
return (
new Memento(state));
    }
    
    
public 
void SetMemento(Memento memento) {
        state = memento.GetState();
    }
    
    
public 
void Show() {
        System.out.println("State = " + state);
    }
}
Caretaker : 负责保存好备忘录 Memento,不能对备忘录的内容进行操作或检查。
class Caretaker {
    
private Memento memento;
    
    
public 
void SetMemento(Memento memento) {
        
this.memento = memento;
    }
    
public Memento GetMemento() {
        
return memento;
    }
}

测试代码

 
View Code

运行结果

 
View Code

本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/p/4241659.html,如需转载请自行联系原作者

你可能感兴趣的文章
面试总结之-查找算法分析
查看>>
30天30个Golang程序学习(一):格式化输出
查看>>
Ceisum官方教程1 -- 开始
查看>>
[20171225]变态的windows批处理4.txt
查看>>
树形控件(CTreeCtrl和CTreeView)
查看>>
*循环单链表
查看>>
杭电3371--Connect the Cities(最小生成树)
查看>>
Codeforces Round #564 (Div. 2) A. Nauuo and Votes
查看>>
linux 下 nginx的负载均衡
查看>>
lua 2
查看>>
linux php多版本
查看>>
06任务开启线程task, 任务开启不能带参数
查看>>
1592: [Usaco2008 Feb]Making the Grade 路面修整
查看>>
[译] Flutter 从 0 到 1
查看>>
canvas粒子时钟
查看>>
C++顺序栈基本操作
查看>>
01背包(类) UVA 10564 Paths through the Hourglass
查看>>
并查集(删除) UVA 11987 Almost Union-Find
查看>>
记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
查看>>
Codeforces Round #295 (Div. 2)
查看>>