Memento设计模式用于将对象恢复到以前的状态,如撤消。但我们可以多次撤消和重做。我已经多次阅读过文章,但我仍然不清楚它们是相似还是相互补充,可以一起使用。
状态模式可以与Memento Design模式相关联还是一起使用?
答案 0 :(得分:2)
“状态模式”中的“状态”与纪念模式不同的状态不同。状态模式的更好名称是“模式模式”。有关详细信息,请参阅this description。
现在,可以使用纪念品来描述涉及模式模式的对象的状态,但这是他们唯一的特定关系。
答案 1 :(得分:2)
要回答您的第一个问题,您可以使用memento重做,通过制作第二个纪念实例来存储重做的“状态”。但是,根据对象的状态存储的复杂程度,使用命令模式提供撤消/重做功能通常“更便宜”。 Command可用于仅存储对undo / redo的更改,而memento可能需要存储整个状态。
tallseth的答案也是正确的,即状态模式中的“状态”与纪念品存储的“状态”不同。
答案 2 :(得分:1)
"州"在Memento中是您保存以供以后检索的状态。它就像一个书签。例如,您可以保存视频位置,然后使用Memento模式返回到该位置。 (各州保存在看守参与者中。)
"州"在State设计模式中,就像在状态机(或状态引擎)中找到的那样。它们就像一个更大的背景,每个州都有一组有限的动作。所以,如果你在" On"州,您的选择是留在" On"陈述或改变为"关闭"州。 (状态模式没有条件语句!)
对于两者的PHP示例,请参阅:
http://www.php5dp.com/category/design-patterns/memento/
和