对象状态,其实就是对对象状态的保存过程进行抽象。涉及的设计模式是备忘录模式。以我们常用的即时贴为例,状态本身被创建为一种对象形式(即时贴),它封装了原始对象的内部状态(作者创作的涂鸦)。只有创建即时贴的原始对象才能看懂保存的状态并用它恢复原来的状态。
备忘录
备忘录模式,在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将对象恢复到原先保存的状态。
这个模式有3个关键角色:原发器(originator)、备忘录(memento)和看管者(caretaker)。原发器创建一个包含其状态的备忘录,并传给看管者。看管人不知如何与备忘录交互,但会把备忘录放在安全之处保管好。(总之,会有个备忘录对象和备忘录管理者,原发器一般是我们的程序 → 简单说就是,我们程序负责创建一个备忘录,交给管理者去保管,我们获取直接通过管理者)
Cocoa Touch框架在归档、属性列表序列化和核心数据中采用了备忘录模式。
当同时满足以下两个条件,应考虑备忘录模式:
- 需要保存一个对象在某个时刻的状态。(备忘录)
- 用于获取状态的接口会暴露实现的细节,需要将其隐藏起来。(看管者)
网友评论