Memento设计模式用于将对象还原到以前的状态,如撤销。但我们可以做多次撤销和重做。我曾多次阅读文章,但仍不清楚它们是否相似或相互补充,是否可以一起使用。
状态模式可以与Memento设计模式相关还是一起使用?
发布于 2013-08-24 19:51:41
“状态模式”中的“状态”与记忆模式所支持的状态不同。状态模式的一个更好的名称是“模式模式”。有关更多细节,请参见其这一描述。
现在,人们可以使用一个备忘录来描述包含模式模式的对象的状态,但这是它们唯一的特殊关系。
发布于 2014-07-31 01:26:56
Memento中的" state“是您保存以供以后检索的状态。有点像书签。例如,您可以保存一个视频位置,然后使用Memento模式返回到该位置。(国家由看守参与者保存。)
状态设计模式中的“状态”类似于状态机(或状态引擎)中的状态。它们的作用就像一个更大的背景,每个州都有一组有限的移动。因此,如果您处于"On“状态,则您的选项是保持在"On”状态或更改为"Off“状态。(状态模式没有条件语句!)
有关这两种方法的PHP示例,请参见:
http://www.php5dp.com/category/design-patterns/memento/
和
http://www.php5dp.com/category/design-patterns/state/
发布于 2013-08-26 02:00:43
要回答第一个问题,可以使用memento来重做,方法是创建第二个memento实例来存储重做的“状态”。但是,根据存储对象的状态有多复杂,使用Command模式提供撤销/重做功能通常“更便宜”。命令只用于存储要撤消/重做的更改,而memento可能需要存储整个状态。
理思的回答也是正确的,即来自国家模式的“状态”与纪念品存储的“状态”不同。
https://stackoverflow.com/questions/18420376
复制相似问题