參考:learning hard
1.理解:備忘錄模式就是對某個類的狀態進行儲存下來,等到需要恢復的時候,可以從備忘錄中進行恢復。生活中這樣的例子經常看到,如備忘**通訊錄,備份操作作業系統,備份資料庫等。
2.模式中的角色如下:1.發起人角色:記錄當前時刻的內部狀態,負責建立和恢復備忘錄資料。
2.備忘錄角色:負責儲存發起人物件的內部狀態,在進行恢復時提供給發起人需要的狀態。
3.管理者角色:負責儲存備忘錄物件
下面是乙個例項,手機通訊錄聯絡人備份與還原,可以備份不同的版本,並且還原
3.**:
using icsharpcode.sharpziplib.checksums;
using icsharpcode.sharpziplib.zip;
using system;
using system.collections.generic;
using system.io;
using system.text;
using system.threading;
using system.linq;
//建立備忘錄,將當期要儲存的聯絡人列表匯入到備忘錄中
// 這裡也應該傳遞深拷貝,new list方式傳遞的是淺拷貝,
// 因為contactperson類中都是string型別,所以這裡new list方式對contactperson物件執行了深拷貝
// 如果contactperson包括非string的引用型別就會有問題,所以這裡也應該用序列化傳遞深拷貝
public contactmemento creatememento()
//將備忘錄的資料匯入到聯絡人列表中
public void restorememento(contactmemento memento)
//列印聯絡人
public void show()
個人,他們是:", this.contactpersons.count);
foreach (contactperson p in contactpersons)
號碼:", p.name, p.mobilename);}}
}//備忘錄
public class contactmemento
}//管理角色
public class caretaker
}public class program
, new contactperson() , new contactperson() };
mobileowner mobileowner = new mobileowner(persons);
mobileowner.show();
//建立備忘錄並儲存備忘錄物件
console.writeline("-------第一次備份-------");
caretaker caretaker = new caretaker();
caretaker.contactmementodic.add(datetime.now.tostring(), mobileowner.creatememento());
//發起人更改聯絡人列表
console.writeline("-------移除最後乙個聯絡人--------");
mobileowner.contactpersons.removeat(2);
mobileowner.show();
//再次備份之前間隔3秒
thread.sleep(3000);
console.writeline("--------第二次備份--------");
caretaker.contactmementodic.add(datetime.now.tostring(), mobileowner.creatememento());
//恢復到原始狀態
console.writeline("-------恢復聯絡人列表,請從一下列表選擇恢復的日期---------");
設計模式 備忘錄模式
錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...
設計模式 備忘錄模式
備忘錄模式 memento pattern 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.original 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。ori...
設計模式 備忘錄模式
備忘錄模式是一種行為模式,該模式業內關於儲存物件當前狀態,並且之後可以再次恢復到此狀態。備忘錄模式實現的方式需要保證被儲存的物件狀態不能被物件從外部訪問,目的是為了保護好被儲存的這些物件狀態的完整性以及內部實現不向外暴露。在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣...