分类: 项目管理
2009-03-30 22:34:00
一、定义:备忘录(memento)模式又叫快照(snapshot)模式或者token模式,主要功能: 备忘录模式是用一个对象来存储另外一个对象的内部状态的快照,实现备忘录模式的关键点是在不破坏封装的情况下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在合适的时候,把这个对象还原。 说明:备忘录模式是模式中比较好理解的一个,这里就不举例子,但是备忘录模式是模式中实现比较难,或者说实现比较巧的,这里主要说说。 二、备忘录模式的实现 1,备忘录模式中的角色 发起人:创建含有内部状态的备忘录对象,并使用备忘录 对象存储状态 负责人:负责人保存备忘录对象,但不检查备忘录对象的内容 备忘录:备忘录对象将发起人对象的内部状态存起来,并保正其内容不被发起人对象之外的对象像读取 | |
注意: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 白箱的优点:实现简单 白箱的缺点:上边说了,破坏了封装,安全性有些问题。 说明:这里白箱的实现只保存了一个状态,其实是可以保存多个状态的。 3,双接口的实现,宽窄接口(黑箱) 如何实现宽窄接口呢,内部类也许是个好方法。我们把备忘录类设计"成发起人"的内部类,但这样还有的问题是同一 package中的其它类也能访问到,为了解决这个问题,我们可以把"备忘录"的方法设计成私有的方法,这样就 可以保正封装,又保正发起人能访问到。实现如下: 定义窄接口 . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 ok,实现了对大多数人实现比较窄的接口,对Originator实现了宽接口. |