我的设计模式:备忘录模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的设计模式:备忘录模式相关的知识,希望对你有一定的参考价值。
我的设计模式-备忘录模式恢复到最初的状态-->对原始状态的保留和恢复
联想到的业务:cms稿件放入到回收站,永久记录状态得用到数据库啊,怎么办?备忘录模式的内存缓存不适用?
类的单一职责
boy职责:状态 改变状态 设置状态 获取状态
备忘录职责:记录当前的状态 恢复状态
迪 米特原则:最少知道原则,不和陌生人说话
问题:备忘录只是记录了一个节点,多个备忘录记录了多个节点,可以恢复到任意节点?备忘录因该支持多个节点?
思考问题:增加备忘录管理者manager角色,有啥好处呢?没体验到
Clone方式的备忘录:实现cloneable接口,深度拷贝,适合简单的场景
多状态的备忘录模式:使用到了BeanUtils,和深度拷贝有什么区别?如何只对想要的几个状态进行备忘?
多备份的备忘录:检查点(例如:时间戳)
现在体现出备忘录管理者的价值的时刻到了(管理多个备忘录)
备忘录一直增加?内存溢出的问题如何解决?
权限的问题:私有-->任何人无法访问。 累不累-->我能访问
双接口设计:正常接口实现业务逻辑,宽接口 空接口-->窄接口
备忘录的专业术语:“白箱”备忘录模式,“黑箱”备忘录模式 多重检查点备忘录
“黑箱”备忘录参考代码如下
发起人:
public class Originator {
//内部状态
private String state = "";
public String getState() { return state;
}
public void setState(String state) { this.state = state;
}
//创建一个备忘录
public IMemento createMemento(){
return new Memento(this.state); }
//恢复一个备忘录
public void restoreMemento(IMemento _memento){
this.setState(((Memento)_memento).getState()); }
//内置类
private class Memento implements IMemento{
//发起人的内部状态
private String state = "";
//构造函数传递参数
private Memento(String _state){
this.state = _state; }
private String getState() { return state;
}
private void setState(String state) { this.state = state;
}
}
}
空接口:
public interface IMemento {
}
备忘录管理者:
public class Caretaker {
//备忘录对象
private IMemento memento;
public IMemento getMemento() { return memento;
}
public void setMemento(IMemento memento) { this.memento = memento;
}
}
以上是关于我的设计模式:备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录