設計模式 備忘錄

2021-09-23 21:19:08 字數 4464 閱讀 9903

設計模式 - 備忘錄

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

效果:

這個需要配合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 備...