Memento 设计模式用于将对象恢复到以前的状态,例如撤消。但是我们可以多次撤消和重做。我已经多次阅读文章,但我仍然不清楚它们是否相似或相互补充并且可以一起使用。
状态模式可以和备忘录设计模式相关还是一起使用?
Memento 设计模式用于将对象恢复到以前的状态,例如撤消。但是我们可以多次撤消和重做。我已经多次阅读文章,但我仍然不清楚它们是否相似或相互补充并且可以一起使用。
状态模式可以和备忘录设计模式相关还是一起使用?
“状态模式”中的“状态”与备忘录模式启用的状态不同。状态模式的一个更好的名称是“模式模式”。有关更多详细信息,请参阅此说明。
现在,人们可能会使用备忘录来描述涉及模式模式的对象的状态,但这是它们唯一具有的特定关系。
Memento 中的“状态”是您保存以供以后检索的状态。它有点像书签。例如,您可以保存视频位置,然后使用 Memento 模式返回到该位置。(状态保存在看守参与者中。)
状态设计模式中的“状态”类似于状态机(或状态引擎)中的状态。它们就像一个更大的环境,每个状态都有一组有限的移动。因此,如果您处于“开”状态,您的选择是保持“开”状态或更改为“关”状态。(状态模式没有条件语句!)
有关两者的 PHP 示例,请参见:
http://www.php5dp.com/category/design-patterns/memento/
和
要回答您的第一个问题,您可以使用 memento 通过创建第二个 memento 实例来存储重做的“状态”来重做。但是,根据存储对象状态的复杂程度,使用命令模式提供撤消/重做功能通常“更便宜”。该命令可用于仅存储对撤消/重做的更改,而 memento 可能需要存储整个状态。
tallseth 的回答也是正确的,即状态模式中的“状态”与 memento 存储的“状态”不同。