iOS设计模式 - 备忘录
生活随笔
收集整理的這篇文章主要介紹了
iOS设计模式 - 备忘录
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
iOS設(shè)計模式 - 備忘錄
?
原理圖
?
說明
1. 在不破壞封裝的情況下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣以后就可以將該對象恢復(fù)到原先保存的狀態(tài)
2. 本人已經(jīng)將創(chuàng)建狀態(tài)與恢復(fù)狀態(tài)的邏輯抽象成了協(xié)議,并配合備忘錄中心一起使用
?
源碼
https://github.com/YouXianMing/iOS-Design-Patterns
// // MementoCenter.h // MementoPattern // // Created by YouXianMing on 15/9/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import "MementoCenterProtocol.h"@interface MementoCenter : NSObject/*** 存儲備忘錄對象** @param mementoObject 備忘錄對象* @param key 標記對象的鍵值*/ + (void)saveMementoObject:(id <MementoCenterProtocol>)mementoObject withKey:(NSString *)key;/*** 獲取備忘錄對象** @param key 標記對象的鍵值** @return 備忘錄對象*/ + (id)mementoObjectWithKey:(NSString *)key;@end // // MementoCenter.m // MementoPattern // // Created by YouXianMing on 15/9/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "MementoCenter.h" #import "FastCoder.h" #import <CommonCrypto/CommonDigest.h>@implementation MementoCenter+ (void)saveMementoObject:(id <MementoCenterProtocol>)mementoObject withKey:(NSString *)key {NSParameterAssert(mementoObject);NSParameterAssert(key);NSData *data = [self makeDataWithValue:[mementoObject currentState]];if (data) {[self storeValue:data with:[self MD5HashWithString:key]];} }+ (id)mementoObjectWithKey:(NSString *)key {NSParameterAssert(key);NSData *data = [self valueWithKey:[self MD5HashWithString:key]];if (data) {return [self makeObjectWithData:data];} else {return nil;} }#pragma mark - md5 + (NSString *)MD5HashWithString:(NSString *)string {CC_MD5_CTX md5;CC_MD5_Init(&md5);CC_MD5_Update(&md5, [string UTF8String], (CC_LONG) [string length]);unsigned char digest[CC_MD5_DIGEST_LENGTH];CC_MD5_Final(digest, &md5);NSString *s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",digest[0], digest[1],digest[2], digest[3],digest[4], digest[5],digest[6], digest[7],digest[8], digest[9],digest[10], digest[11],digest[12], digest[13],digest[14], digest[15]];return s; }#pragma mark - 本地持久化 + (void)storeValue:(id)value with:(NSString *)key {[[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; }+ (id)valueWithKey:(NSString *)key {return [[NSUserDefaults standardUserDefaults] objectForKey:key]; }#pragma mark - 使用FastCode來處理對象 + (NSData *)makeDataWithValue:(id)value {return [FastCoder dataWithRootObject:value]; }+ (id)makeObjectWithData:(NSData *)data {return [FastCoder objectWithData:data]; }@end // // MementoCenterProtocol.h // MementoPattern // // Created by YouXianMing on 15/9/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h>@protocol MementoCenterProtocol <NSObject>@required /*** 生成當前狀態(tài)對象值** @return 對象值*/ - (id)currentState;/*** 恢復(fù)到指定的狀態(tài)** @param state 狀態(tài)*/ - (void)recoverFromState:(id)state;@end?
分析
使用FastCoder來作為存儲工具
?
轉(zhuǎn)載于:https://www.cnblogs.com/YouXianMing/p/4802139.html
總結(jié)
以上是生活随笔為你收集整理的iOS设计模式 - 备忘录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类型、值和变量(一)
- 下一篇: 新篇章