Objective-C 设计模式-备忘录模式(Memento)

 

备忘录模式定义

备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式。在不破坏封装的前提下,捕捉一个对象的内部状态,并在对象之外保存这个状态,这样以后可以将该对象恢复到以前保存的状态。备忘录模式中有三个关键的角色,原发器(originator)、备忘录(memento)、看管人(caretaker)。原发器创建一个保存其状态的备忘录,原发器知道如何跟备忘录交互,但不知道备忘录如何保存,原发器将备忘录传递给看管者,看管者不知如何跟备忘录交互,但会将备忘录放到安全之处保存好。

 

何时使用备忘录模式

 需要保存一个对象在某一时刻的状态,这样以后可以将该对象恢复到原来的状态。

 

备忘录模式优缺点

优点:

  1. 有时原发器对象的内部状态必须保存在原发器对象以外的地方,但是必须要由原发器对象自己管理读取,这时使用备忘录模式可以把复杂的原发器内部状态对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
  2. 简化了原发器类,对象的内部状态是保存在原发器之外的,这样,原发器不再需要管理和保存其内部状态的各个版本
  3. 当原发器角色的状态改变的时候,有可能这个状态无效或错误的,这时候就可以使用保存的备忘录将对象恢复到先前的状态。

缺点:

  1. 使用备忘录可能代价很高。如果原发器在生成备忘录时必须复制并存储大量的信息,或者客户非常频繁地创建备忘录和恢复原发器状态,可能会导致非常大的开销。
  2. 当看管人角色将一个备忘录 存储起来的时候,看管人可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否很昂贵。
  3. 当原发器角色的状态改变的时候,有可能这个协议无效。如果状态改变的成功率不高的话,不如采取“假如”协议模式。

  

 设计与实现

备忘录模式需要对原发器提供宽接口,对看管人提供窄接口,这样才能提高整个设计的封装性。

 

posted on 2013-06-06 22:27  Markhy  阅读(538)  评论(1编辑  收藏  举报

导航