設計模式 - 備忘錄
備忘錄模式很簡單,就是儲存物件,然後支援恢復物件到之前的某個狀態,玩過遊戲的,一定懂得存檔一說,備忘錄就是對物件的存檔與管理。
效果:
這個需要配合fastcoder使用,請自行到github上去搜尋原始碼fastcoder原始碼^_^!
原始碼:model.h 與
model.m
//
// model.h
// 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
//
// model.m
// 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
id object = 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
控制器原始碼:
//
// viewcontroller.m
// 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 memen...
備忘錄設計模式
1.備忘錄設計模式 1.1什麼叫備忘錄模式?memento模式也叫備忘錄模式,是行為模式之一,它的作用是在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。並且在需要的時候 undo rollback 恢復物件以前的狀態。備忘錄模式 memento pattern 又叫做快照模...
設計模式 備忘錄模式
錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...