码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-09 14:56:12      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:string   bean   陌生人   manage   术语   ring   tor   拷贝   场景   

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


恢复到最初的状态-->对原始状态的保留和恢复

联想到的业务: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;

}

}



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

标签:string   bean   陌生人   manage   术语   ring   tor   拷贝   场景   

原文地址:http://blog.51cto.com/13496382/2070538

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!