設計模式 備忘錄

2021-09-06 20:32:57 字數 4768 閱讀 8516

設計模式 - 備忘錄

備忘錄模式很簡單,就是儲存物件,然後支援恢復物件到之前的某個狀態,玩過遊戲的,一定懂得存檔一說,備忘錄就是對物件的存檔與管理。

效果:

這個需要配合fastcoder使用,請自行到github上去搜尋原始碼fastcoder原始碼^_^!

原始碼:model.h 與 

model.m

//

//mementopattern

////

created by youxianming on 15/1/3.

////

#import

@inte***ce

model : nsobject

@property (nonatomic, strong) nsstring *name;

@property (nonatomic, strong) nsstring *age;/**

* 初始化方法

* * @param key 用來標示物件唯一性

* * @return 物件 */

- (instancetype)initwithkey:(nsstring *)key;/**

* 從某個狀態恢復

* * @param slot 狀態槽位(第幾個存檔位置)

* @param key 標示字串(保證存檔唯一)

* * @return 存檔的物件,如果物件不存在,則重新建立 */

+ (id)recoverfromslot:(nsinteger)slot key:(nsstring *)key;/**

* 儲存到slot當中(按照陣列的順序) */

- (void

)store;

@end

//

//mementopattern

////

created by youxianming on 15/1/3.

////

#import

"model.h

"#import

"fastcoder.h

"#import

"nsstring+file.h

"@inte***ce

model ()

@property (nonatomic, strong) nsstring *key;

@property (nonatomic, strong) nsmutablearray *slotinfoarray;

@end

@implementation

model

-(instancetype)init

return

self;

}- (instancetype)initwithkey:(nsstring *)key

+ (id)recoverfromslot:(nsinteger)slot key:(nsstring *)key

nsstring *arraypath = [[@"

/documents

/%@_array

", key]];

nsstring *objectpath = [[@"

/documents

/%@_%ld

", key, (long

)slot]];

idobject =nil;

nsarray *array =[fastcoder objectwithdata:[self datawithpath:arraypath]];

if (array.count > slot && slot >= 0

)

return

object;}

- (void

)store

self.slotinfoarray =[fastcoder objectwithdata:[self datawithpath:[self arraypath]]];

if (self.slotinfoarray.count == 0

) else

nslog(

@"store sucess!");

}#pragma mark - private method

- (nsstring *)filepathatslot:(nsinteger)slot

- (nsstring *)arraypath

- (nsdata *)datawithpath:(nsstring *)path

+ (nsdata *)datawithpath:(nsstring *)path

@end

nsstring+file.h 與 

nsstring+file.m

//

//nsstring+file.h

//category

////

created by youxianming on 14-8-29.

////

#import

@inte***ce

nsstring (file)

//沙盒路徑

- (nsstring *)path;

/*/documents

/library/caches

/library/preferences

/tmp */

//bundle檔案

- (nsstring *)bundlefile;

//檢測檔案或者資料夾是否存在

-(bool)exist;

//建立資料夾

-(bool)createfolder;

//是否是資料夾

-(bool)isdirectory;

//複製到這個路徑

- (bool)copyto:(nsstring *)path;

//移動到這個路徑

- (bool)moveto:(nsstring *)path;

//刪除檔案

-(bool)remove;

//遍歷出資料夾中的檔案

- (nsarray *)enumeratorfolder;

//遍歷出資料夾並在block中檢視

- (void)enumeratorfoldereach:(void (^)(nsstring *path))block;

//檔案資訊

- (nsdictionary *)fileinfo;

//檔案大小

- (int

)filesize;

@end

//

//nsstring+file.m

//category

////

created by youxianming on 14-8-29.

////

#import

"nsstring+file.h

"@implementation

nsstring (file)

- (nsstring *)path

- (nsstring *)bundlefile

-(bool)exist

-(bool)createfolder

-(bool)isdirectory

- (bool)copyto:(nsstring *)path

- (bool)moveto:(nsstring *)path

-(bool)remove

- (nsarray *)enumeratorfolder

return

storearray;

}else

}- (void)enumeratorfoldereach:(void (^)(nsstring *path))block

[storearray enumerateobjectsusingblock:^(id obj, nsuinteger idx, bool *stop) ];

}}- (nsdictionary *)fileinfo

- (int

)filesize

@end

控制器原始碼:

//

//mementopattern

////

created by youxianming on 15/1/3.

////

#import

"viewcontroller.h

"#import

"nsstring+file.h

"#import

"model.h

"@inte***ce

viewcontroller ()

@end

@implementation

viewcontroller

- (void

)viewdidload

@end

幾個關鍵的地方:

原理其實非常簡單,就是將物件寫檔案,然後從檔案從恢復出物件,但一定要有管理的功能,本例中並沒有處理如何刪除存檔,其實存檔可以做成堆疊或者佇列模式,這個因需求而已,本處本人只是拋磚引玉,簡單介紹下備忘錄設計模式!

設計模式 備忘錄

設計模式 備忘錄 備忘錄模式很簡單,就是儲存物件,然後支援恢復物件到之前的某個狀態,玩過遊戲的,一定懂得存檔一說,備忘錄就是對物件的存檔與管理。效果 這個需要配合fastcoder使用,請自行到github上去搜尋原始碼fastcoder原始碼 原始碼 model.h 與 model.m model...

備忘錄設計模式

1.備忘錄設計模式 1.1什麼叫備忘錄模式?memento模式也叫備忘錄模式,是行為模式之一,它的作用是在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。並且在需要的時候 undo rollback 恢復物件以前的狀態。備忘錄模式 memento pattern 又叫做快照模...

設計模式 備忘錄模式

錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...