Momento和Prototype Design Pattern的区别是什么?



观察到的Momento和原型设计模式的区别(来自GOF):

  1. Momento设计模式使用类x创建类y的内部状态的快照。Prototype设计模式使用类y创建类y的内部状态的快照(=clone)。
  2. 纪念品设计模式是一种行为设计模式,原型设计模式是一种创造性设计模式。
  3. Momento设计模式使得在类x中创建类y状态的部分快照成为可能。在原型设计模式中创建类y的完整快照(=克隆)。
  4. 意图不同

使用Momento和Prototype Design Pattern也可以获得相同的结果:

  • 原型设计模式:可以克隆对象x的状态,存储在一个列表中,并在需要撤销操作时分配给对象x。
  • Momento设计模式:对象x的状态可以保存在对象y中,存储在一个列表中,当需要撤销操作时,可以分配给对象x。

这两种模式之间的区别是什么(除了已经列出的)?什么时候我们用其中一个而不是另一个呢?原型模式对我来说似乎是首选的选择,如果完整的对象需要被"快照"并堆叠在一个撤消操作的列表中。

Prototype模式描述了创建对象的一种方式。对象的行为与原型模式无关。纪念品模式描述了对象的行为方式。对象如何创建与Memento模式无关。

更广泛地说,任何创造模式都可以产生任何行为(或结构或任何其他)模式所必需的对象。这并不意味着创建模式以任何方式与它们创建的对象碰巧实现的模式重叠。

纪念品的本质是一个具有两个接口的对象。选自GoF书285页

纪念品实际上有两个接口。看守人看到一个狭窄的接口到纪念品-它只能将纪念品传递给其他对象。相反,Originator看到一个宽的接口,允许它访问所有的数据…

所以Memento模式的关键是在一个对象中实现这两个接口。如果选择通过克隆实例化该对象,可以采用两种模式;但是在创造和行为之间有明确的界限。一旦创建了克隆,原型模式就会停止。当对象同时使用窄接口和宽接口时,Memento模式开始。

相关内容

最新更新