我的设计模式:备忘录模式

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;

}

}



以上是关于我的设计模式:备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录

设计模式备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式之备忘录模式

设计模式之状态模式与备忘录模式详解和应用

设计模式-备忘录模式

设计模式——备忘录模式