欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

iOS设计模式 - 备忘录

发布时间:2025/7/14 asp.net 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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设计模式 - 备忘录的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。