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

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

一、概述

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

二、UML图示

Originator(发起人):负责创建一个备忘录,用以记录当前的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些状态。

Memnto(备忘录):负责保存Originator对象的内部状态,并防止originator以外的对象访问备忘录。备忘录有两个接口,caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。originator能看到一个宽接口,允许它反问返回到先前状态的所有数据。

Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作和检查。

三、代码实现

1、发起人Originator

public class Originator {    private String state;    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }    public Memento createMemto(){        return new Memento(state);    }    public void setMemento(Memento memento){        state = memento.getState();    }    public void show(){        System.out.println("当前状态是:"+state);    }}

2、备忘录Memento

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;    }}

3、管理者Caretaker

public class Caretaker {    private Memento memento;    public Memento getMemento() {        return memento;    }    public void setMemento(Memento memento) {        this.memento = memento;    }}

4、测试

public class Test {    public static void main(String[] args) {        //originator初始状态on        Originator originator = new Originator();        originator.setState("on");        originator.show();        //保存状态时,由于有很好的封装,可以隐藏originator的实现细节        Caretaker caretaker = new Caretaker();        caretaker.setMemento(originator.createMemto());        //originator改变状态off        originator.setState("off");        originator.show();        //恢复原始状态        originator.setMemento(caretaker.getMemento());        originator.show();    }}输出:当前状态是:on当前状态是:off当前状态是:on

注:参考文献《大话设计模式》程杰著。

你可能感兴趣的文章
比较strtr, str_replace和preg_replace三个函数的效率
查看>>
ubuntu 下编译PHP5.5.7问题:configure: error: freetype.h not found.
查看>>
PHP编译configure时常见错误 debian centos
查看>>
configure: error: Please reinstall the BZip2 distribution
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
【增强学习在无人驾驶中的应用】
查看>>
《python+opencv实践》四、图像特征提取与描述——29理解图像特征
查看>>
《python+opencv实践》四、图像特征提取与描述——30Harris 角点检测
查看>>
《python+opencv实践》四、图像特征提取与描述——31 Shi-Tomasi 角点检测& 适合于跟踪的图像特征
查看>>
OpenCV meanshift目标跟踪总结
查看>>
人工神经网络——神经元模型介绍
查看>>
人工神经网络——感知器介绍
查看>>
人工神经网络——反向传播算法(BackPropagation)
查看>>
进程的地址空间概述
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
Win32程序之进程的原理
查看>>
C++虚函数原理
查看>>
MySQL的索引
查看>>
今天,Python信息量很大!
查看>>