首页 / 设计模式 / 抽丝剥茧——备忘录设计模式
抽丝剥茧——备忘录设计模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了抽丝剥茧——备忘录设计模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1700字,纯文字阅读大概需要3分钟。
内容图文
![抽丝剥茧——备忘录设计模式](/upload/InfoBanner/zyjiaocheng/1331/fe086695514d4ded843c5754c6b36861.jpg)
备忘录设计模式
兄弟们好,今天来和大家聊聊备忘录设计模式。
它的主要思想是:保存一个对象在某一时刻的副本,并且该对象的副本在外部不可以被访问,同时该对象的副本可以被内部重新加载和修改
看到这里,有没有想到我们的序列化。在学习IO
流的时候我们可以通过Serializable
实现对象的序列化,这个序列化的过程就是一个备忘录的过程,通过对当前对象序列化,包含当前的状态,当需要的时候再将这个状态加载进来。
我们常常见过的游戏存档就是这个实现原理,将所有涉及到对象全部序列化,包含再本地文件中,然后读档的时候再加载进去。
我们来看一下它类图实现:
它主要有三个角色:
-
Originator
用来描述一个需要被进行备忘录的对象,它可以主动的创建一个备忘录,并且设置其状态 -
Memento
备忘录对象,用来保存Originator
对象的状态,提供两个接口用于读取和设置对象的状态 -
Caretake
。执行具体的备忘录调用。对于它而言备忘录仅仅可以查看,但不能修改
我们来看一下具体的代码实现:
备忘录接口,一个标识
interface Memento{
}
需要记录的对象,宽接口,可以访问备忘录的所有信息
class Originator{
private String state ;
public Memento createMemento(){
return new InnerMemento(state);
}
public void restoreState(Memento memento){
this.state = ((InnerMemento)memento).getState();
}
public void setState(String state) {
this.state = state;
}
class InnerMemento implements Memento{
private String state ;
public InnerMemento(String state){
this.state = state ;
}
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
}
具体负责调用,窄接口,仅仅可以查看备忘录
class Caretaker{
private Originator originator ;
public Caretaker(Originator originator){
this.originator = originator ;
}
public Memento createMemento(){
return originator.createMemento();
}
public void restoreState(Memento memento){
originator.restoreState(memento);
}
}
具体调用
public static void main(String[] args) {
Originator originator = new Originator();
Caretaker caretaker = new Caretaker(originator);
//保存当前状态
Memento memento = caretaker.createMemento();
originator.setState("我的");
caretaker.createMemento();
}
有没有发现,这个设计模式强调了一个安全访问的原则,通过对不同的接口实现了一个宽接口和窄接口,来实现不同层次的调用。这个模式常常会和命令设计模式联合起来,用来记录undo
操作,例如mysql
持久化。
好啦,今天的设计模式就到这里了,兄弟们,晚安。
原文:https://www.cnblogs.com/onlyzuo/p/13904901.html
内容总结
以上是互联网集市为您收集整理的抽丝剥茧——备忘录设计模式全部内容,希望文章能够帮你解决抽丝剥茧——备忘录设计模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。