備忘錄( Memento)模式: 在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可將該對(duì)象恢復(fù)到原先保存的狀態(tài)。
適用性:
-
必須保存一個(gè)對(duì)象在某一個(gè)時(shí)刻的(部分)狀態(tài), 這樣以后需要時(shí)它才能恢復(fù)到先前的狀態(tài)。
- 如果一個(gè)用接口來(lái)讓其它對(duì)象直接得到這些狀態(tài),將會(huì)暴露對(duì)象的實(shí)現(xiàn)細(xì)節(jié)并破壞對(duì)象的封裝性。
所涉及的角色:
備忘錄角色:將發(fā)起人 (Originator) 的對(duì)象內(nèi)部狀態(tài)存儲(chǔ)起來(lái),備忘錄可以根據(jù)發(fā)起人對(duì)象的的判斷來(lái)決定存儲(chǔ)多少發(fā)起人( Originator )對(duì)象的內(nèi)部狀態(tài)。奮忘錄同時(shí)可以保護(hù)其內(nèi)容不被發(fā)起人 (Originator) 對(duì)象之外的任何對(duì)象所索。
發(fā)起人 (Originator) 角色:創(chuàng)建一個(gè)含有當(dāng)前的內(nèi)部狀態(tài)的的備忘錄對(duì)象 , 使用備忘錄對(duì)象存儲(chǔ)內(nèi)部狀態(tài)。
負(fù)責(zé)人( Caretaker )角色:負(fù)責(zé)保存?zhèn)渫泴?duì)象,不檢查備忘錄對(duì)象的內(nèi)容。
一個(gè)簡(jiǎn)單的例子:
備忘錄角色













































































客戶端:























參考資料:《java與模式》
《設(shè)計(jì)模式速查找手冊(cè)》