你想預(yù)測(cè)對(duì)一個(gè)對(duì)象做出改變后的反應(yīng)。
使用備忘錄模式(Memento Pattern)來(lái)跟蹤一個(gè)對(duì)象的變化。使用這個(gè)模式的類會(huì)輸出一個(gè)存儲(chǔ)在其他地方的備忘錄對(duì)象。
如果你的應(yīng)用程序可以讓用戶編輯文本文件,例如,他們可能想要撤銷上一個(gè)動(dòng)作。你可以在用戶改變文件之前保存文件現(xiàn)有的狀態(tài),然后回滾到上一個(gè)位置。
class PreserveableText
class Memento
constructor: (@text) ->
constructor: (@text) ->
save: (newText) ->
memento = new Memento @text
@text = newText
memento
restore: (memento) ->
@text = memento.text
pt = new PreserveableText "The original string"
pt.text # => "The original string"
memento = pt.save "A new string"
pt.text # => "A new string"
pt.save "Yet another string"
pt.text # => "Yet another string"
pt.restore memento
pt.text # => "The original string"
備忘錄對(duì)象由 PreserveableText#save 返回,為了安全保護(hù),分別地存儲(chǔ)著重要的狀態(tài)信息。你可以序列化備忘錄以便來(lái)保證硬盤中的“撤銷”緩沖或者是那些被編輯的圖片等數(shù)據(jù)密集型對(duì)象。