iOS设计模式 - 备忘录
生活随笔
收集整理的这篇文章主要介绍了
iOS设计模式 - 备忘录
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
iOS设计模式 - 备忘录
原理图
说明
1. 在不破坏封装的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态
2. 本人已经将创建状态与恢复状态的逻辑抽象成了协议,并配合备忘录中心一起使用
源码
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 /*** 生成当前状态对象值** @return 对象值*/ - (id)currentState;/*** 恢复到指定的状态** @param state 状态*/ - (void)recoverFromState:(id)state;@end
分析
使用FastCoder来作为存储工具
转载于:https://www.cnblogs.com/YouXianMing/p/4802139.html
总结
以上是生活随笔为你收集整理的iOS设计模式 - 备忘录的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 类型、值和变量(一)
- 下一篇: Winform、WPF、Silverli