【问题标题】:Memento design pattern and State design pattern备忘录设计模式和状态设计模式
【发布时间】:2013-08-27 12:58:45
【问题描述】:

Memento 设计模式用于将对象恢复到以前的状态,例如撤消。但是我们可以多次撤消和重做。我已经多次阅读文章,但我仍然不清楚它们是否相似或相辅相成,可以一起使用。

State 模式可以和 Memento Design 模式相关还是一起使用?

【问题讨论】:

    标签: oop design-patterns state-pattern memento


    【解决方案1】:

    “状态模式”中的“状态”与备忘录模式启用的状态不同。状态模式的一个更好的名称是“模式模式”。详情请参阅this description

    现在,人们可能会使用备忘录来描述涉及模式模式的对象的状态,但这是它们唯一的特定关系。

    【讨论】:

    • 链接已过期
    【解决方案2】:

    Memento 中的“状态”是您保存以供以后检索的状态。它有点像书签。例如,您可以保存视频位置,然后使用 Memento 模式返回到该位置。 (状态保存在看守参与者中。)

    状态设计模式中的“状态”类似于状态机(或状态引擎)中的状态。它们就像一个更大的环境,每个状态都有一组有限的移动。因此,如果您处于“开”状态,您的选择是保持“开”状态或更改为“关”状态。 (状态模式没有条件语句!)

    有关两者的 PHP 示例,请参阅:

    http://www.php5dp.com/category/design-patterns/memento/

    http://www.php5dp.com/category/design-patterns/state/

    【讨论】:

      【解决方案3】:

      要回答您的第一个问题,您可以使用 memento 通过创建第二个 memento 实例来存储重做的“状态”来重做。但是,根据存储对象状态的复杂程度,使用命令模式提供撤消/重做功能通常“更便宜”。该命令可用于仅存储要撤消/重做的更改,而 memento 可能需要存储整个状态。

      tallseth 的回答也是正确的,即状态模式中的“状态”与 memento 存储的“状态”不同。

      【讨论】:

      • 实际上,您宁愿同时使用CommandMemento 来实现撤消/重做功能:Command 将使用Memento 来维护撤消/重做操作所需的状态。见Rules of Thumbhere
      猜你喜欢
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      相关资源
      最近更新 更多