其中哪一个是 Memento 设计模式的正确实现?

Which among these is the proper implementation of the Memento design pattern?

在GOF Book中,Memento设计模式的结构是这样的:
但是当我搜索维基百科时,它说 Memento 设计模式的结构是这样的:

两者哪个是正确的实现方式?

所有这些图表都显示了同一时刻模式实施的不同方面。

两个 class 图都不完整:

GOF 图缺少看管者和发起者之间的关联。大多数 class 图遗漏了很多关联,但这一个很重要,应该真正包含在内。

维基百科图表遗漏了看门人抓住瞬间的事实。这也是模式中真正应该出现在图表中的重要部分。

GOF 还正确地注意到 Originator -> Momento 箭头是一个依赖项,而不仅仅是一个关联,因为 Originator class 需要 Momento class 的功能来实现它的接口。

序列图最有助于解释其工作原理。

这两张图以不同的方式解释了相同的概念。 Momento 模式的关键概念是 Momento 模式用于保存对象的状态并在之后恢复状态。 它基本上由四个 classes 组成:

1.发起者 Class: 发起者 class 创建状态并将其存储在 Memento 的对象中 2。 Momento Class: Momento class 从 Momento 恢复对象状态 3。 Caretaker Class: Caretaker class 持有 Momento 对象列表 4。 MomentoDemo Class: 它同时使用 Originator 和 Caretaker classes 并使用其对象来显示对象状态的恢复。