設計模式 - 備忘錄
備忘錄模式很簡單,就是儲存物件,然後支援恢復物件到之前的某個狀態,玩過遊戲的,一定懂得存檔一說,備忘錄就是對物件的存檔與管理。
效果:
這個需要配合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
//nsstring+file.h 與//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.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 備...