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

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

定义

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

类图及角色

在这里插入图片描述

备忘录角色(Memento):存储“备忘发起角色”的内部状态,备忘发起角色决定备忘录角色存储哪些内部状态。备忘录角色有宽接口(备忘发起角色能看到)和窄接口(备忘录管理角色能看见)。
备忘发起角色(Originator):创建一个备忘录用以记录当前时刻它的内部状态。
备忘录管理角色(Caretaker):负责保存备忘录。不能对备忘录的内容进行操作或检查。

//备忘发起角色public class Originator {
//状态是私有的 private String state; public Memento createMemento() {
return new Memento(this.state); } public void recoverMemento(Memento memento) {
this.setState(memento.getState()); } public void show() {
System.out.println("state = " + this.state); } public String getState() {
return state; } public void setState(String state) {
this.state = state; }}//备忘录角色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; } }//备忘管理角色public class CareTaker {
private Memento memento; public Memento getMemento() {
return memento; } public void setMemento(Memento memento) {
this.memento = memento; }}//客户端public class MementoClient {
public static void main(String[] args) {
// 设置初始状态 Originator originator = new Originator(); originator.setState("On"); originator.show(); // 管理者通过备忘录保存状态,由于有了很好地封装,可以隐藏Originator的实现细节 CareTaker careTaker = new CareTaker(); careTaker.setMemento(originator.createMemento()); // 改变状态 originator.setState("Off"); originator.show(); // 通过管理者从备忘录中恢复状态 originator.recoverMemento(careTaker.getMemento()); originator.show(); }}

备忘录模式实现的3种方法

  1. 通过宽接口和窄接口实现。
  2. 通过内部类实现。(把备忘录角色作为备忘发起角色的一个私有内部类)
  3. 使用clone方法来简化备忘录角色(简化)。
    实际应用中需要保存备忘发起角色大量的历史状态,最简单的方法是使用容器(list)按照顺序存放,这样就能很好地实现redo、undo功能了。
备忘录角色适用情况
  1. 需要保存对象在某一个时刻的(部分)状态。
  2. 不破坏对象的封装性。
备忘录模式和命令模式的不同
  1. 一个保存Object的状态,一个保存命令。
  2. 执行对象不同,保存状态的对象也不同,执行的操作也不同。
  3. 备忘录模式更加稳定,命令模式执行更加广泛。

上一篇:

下一篇:

转载地址:http://wmrai.baihongyu.com/

你可能感兴趣的文章
微信状态视频、图片素材来啦!
查看>>
再见了!锤子!!!
查看>>
LeetCode 全站第一,牛逼!
查看>>
为什么全网都在劝你学Java、Python,而不是C++?
查看>>
卧槽!阿里巴巴《算法笔记》开源了,完整版PDF开放下载!
查看>>
百度的骚操作。。。
查看>>
蔚来,牛X!
查看>>
微信悄悄新出了个野心很大的App
查看>>
微信红包封面制作小程序开放,人人都可免费制作了!!!
查看>>
13000亿!目瞪口呆!
查看>>
腾讯,搞了一个大事!
查看>>
入职腾讯第九年,我辞职了
查看>>
17 张程序员壁纸(使用频率很高)
查看>>
送一台全新手机,手慢无~
查看>>
全球顶级的14位程序员!膜拜!
查看>>
太赛博朋克!华为天才少年自制B站百大Up奖杯,网友:技术难度不高,侮辱性极强...
查看>>
华为正式宣布养猪,网友沸腾:支持华为自救!
查看>>
真的有必要读研究生吗?
查看>>
一个员工的离职成本到底有多恐怖!
查看>>
微软骂人:请勿TM关闭......
查看>>