2013-08-24 135 views
3

紀念品設計圖案用於將對象恢復到以前的狀態,如撤消。但是我們可以多次進行撤消和重做。我已經多次閱讀文章,但對我而言仍然不清楚,它們是相似還是相輔相成,可以一起使用。紀念品設計圖案和狀態設計圖案

Can State模式可以與Memento Design模式相關還是一起使用?

回答

2

「狀態模式」中的「狀態」與記憶模式所允許的狀態不同。狀態模式的一個更好的名字將是「模式模式」。有關更多詳細信息,請參閱this description

現在,人們可以使用記憶來描述具有模式模式的對象的狀態,但這是他們唯一的特定關係。

2

要回答你的第一個問題,你可以用第二個備忘錄實例存儲重做的「狀態」來使用備忘錄來重做。但是,取決於存儲對象狀態的複雜程度,使用命令模式提供撤消/重做功能通常「更便宜」。命令可用於僅存儲撤消/重做的更改,而備忘錄可能需要存儲整個狀態。

tallseth的回答也是正確的,即來自州模式的「狀態」與記憶存儲的「狀態」不一樣。

+0

其實,你寧願同時使用'Command'和用於撤銷/重做功能的'Memento':'Command'然後將使用'Memento'來維護撤銷/重做操作所需的狀態。參見'拇指規則'[這裏](https://sourcemaking.com/design_patterns/memento)。 – Scadge

1

Memento中的「狀態」是您爲以後檢索而保存的狀態。它就像書籤一樣。例如,您可以保存一個視頻位置,然後使用Memento模式返回到該位置。 (國家保存在看守參與者中。)

狀態設計模式中的「狀態」與狀態機(或狀態引擎)中的狀態類似。它們表現得像一個更大的背景,每個國家都有一套有限的動作。所以如果你處於「開啓」狀態,你的選擇是保持「開啓」狀態或改變到「關閉」狀態。 (!國家的模式不具備條件語句)

對於這兩個PHP的例子看:

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

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