簡體   English   中英

備忘錄設計模式和狀態設計模式

[英]Memento design pattern and State design pattern

備忘錄設計模式用於將對象恢復到以前的狀態,如撤銷。 但是我們可以多次撤銷和重做。 我已經多次閱讀文章,但我仍然不清楚它們是否相似或相互補充以及可以一起使用。

狀態模式可以與紀念品設計模式相關或一起使用嗎?

“狀態模式”中的“狀態”與紀念品模式啟用的狀態不同。 狀態模式的更好名稱是“模式模式”。 有關更多詳細信息,請參閱此說明

現在,人們可能會使用紀念品來描述涉及模式模式的對象的狀態,但這是它們唯一的特定關系。

Memento 中的“狀態”是您保存以供以后檢索的狀態。 它有點像書簽。 例如,您可以保存視頻位置,然后使用備忘錄模式返回到該位置。 (狀態保存在看守參與者中。)

狀態設計模式中的“狀態”類似於狀態機(或狀態引擎)中的狀態。 它們就像一個更大的上下文,其中每個狀態都有一組有限的移動。 因此,如果您處於“開啟”狀態,您的選擇是保持“開啟”狀態或更改為“關閉”狀態。 (狀態模式沒有條件語句!)

有關兩者的 PHP 示例,請參見:

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

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

要回答您的第一個問題,您可以通過創建第二個備忘錄實例來存儲重做的“狀態”,從而使用備忘錄來重做。 但是,根據存儲對象狀態的復雜程度,使用命令模式提供撤消/重做功能通常“更便宜”。 Command 可用於僅存儲對撤消/重做的更改,而 memento 可能需要存儲整個狀態。

tallseth 的回答也是正確的,即狀態模式中的“狀態”與紀念品存儲的“狀態”不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM