亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS設計模式之備忘錄模式

2019-11-14 18:33:52
字體:
來源:轉載
供稿:網友

備忘錄模式

基本理解

  • 這個模式有三個關鍵角色:原發器(Originator)、備忘錄(Memento)、看管人(caretaker)。三者的基本關系是:原發器創建一個包含其狀態的備忘錄,并傳給看管人??垂苋瞬恢廊绾闻c備忘錄交互,但會把備忘錄放在一個安全之處保管好。
  • 備忘錄(Memento):在 不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣以后就可以將該對象回復到原先保存的狀態。
  • Originator(發起人):負責創建一個備忘錄,用以記錄當前時刻它的內部狀態,并且可使用恢復備忘錄內部狀態。Originator可根據需要決定Memento存儲Originator的哪些內部狀態。
  • Memento(備忘錄):負責存儲Originator對象的內部狀態,并可防止Originator以外的其他對象訪問備忘錄。備忘錄有兩個接口,CareTaker
    只能看到備忘錄的窄接口,它只能將備忘錄傳給其他對象。originator能夠看到一個寬接口,允許它訪問返回到先前狀態所需的所有數據。
  • Caretaker(管理者):負責保存好備忘錄,不能對備忘錄的內容進行操作或檢查。
  • 就是把要保存的細節給封裝在了Memento中,哪一天要更改保存的細節也不用影響客戶端了。

備忘錄使用場合

  • 備忘錄模式比較適用于功能比較復雜的,但需要維護或記錄屬性歷史的類,或者需要保存的屬性只是眾多屬性中的一小部分時,Orignator可以根據保存的Memento信息還原到前一狀態。
  • 如果在某個系統中使用命令模式時,需要實現命令的撤銷功能,那么命令模式可以使用備忘錄模式來存儲撤銷操作的狀態。有的時候一些對象的內部信息必須要保存在對象以外的地方,但是必須要由對象自己讀取,這時,使用備忘錄可以把復雜的對象內部信息對其他的對象屏蔽起來。
  • 用于獲取狀態的接口會暴露實現接口,需要將其屏蔽起來。
  • 它一般應用于游戲、文字處理程序的設計中,這種程序需要保存當前上下文的復雜狀態的快照并在以后恢復處理。

作用

  • 當角色的狀態改變時,有可能這個狀態無效,這時候就可以使用暫時存儲起來的備忘錄將狀態復原。

Cocoa Touch框架中的備忘錄模式

  • Cocoa Touch框架在歸檔、屬性列表序列化和核心數據采用了備忘錄模式。

    • Cocoa的歸檔是對對象以及其屬性還有同其他對象間的關系進行編碼,形成一個文檔,該文檔既可保存與文件系統中,也可在進程或網絡間傳送。對象與其他對象的關系被看做對象圖的網絡。
    • 歸檔過程把對象保存為一種與架構無關的字節流,保持對象的標識以及對象之間的關系。對象的類型也同數據一起保存。從字節流解碼出來的對象通常用于對象編碼時相同的類進行實例化。使用NSCoder的具體類NSKeyedArchiver和NSKeyedUnarchiver,使用基于鍵的歸檔技術,被編碼與解碼的對象必須遵守NSCoding協議并實現以下方法:

    -(id)initWithCoder:(NSCoder *)coder;
    -(void)encodeWithCoder:(NSCoder *)coder;

例子

該例子就是通過備忘錄模式來保存Student的實例stu1更改名字和地址之前的原名字和地址。然后stu1恢復原來的名字和地址。具體代碼如下:
Caretaker.h

////  Caretaker.h//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import <Foundation/Foundation.h>@class Memo;@interface Caretaker : NSObject@PRoperty(nonatomic,strong) Memo *memo;@end

Caretaker.m

////  Caretaker.m//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import "Caretaker.h"@implementation Caretaker@end

上面這個是看管人。
Memo.h

////  Memo.h//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import <Foundation/Foundation.h>@interface Memo : NSObject{    NSString *tempname;    NSString *tempaddress;}-(Memo *)initWithName:(NSString *)name andWithAddress:(NSString *)address;-(NSString *)getName;-(NSString *)getAddress;@end

Memo.m

////  Memo.m//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import "Memo.h"@implementation Memo-(Memo *)initWithName:(NSString *)name andWithAddress:(NSString *)address{    tempname = name;    tempaddress = address;    return self;}-(NSString *)getAddress{    return tempaddress;}-(NSString *)getName{    return tempname;}@end

上面這個是備忘錄。
Student.h

////  Student.h//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import <Foundation/Foundation.h>@class Memo;@interface Student : NSObject@property(nonatomic,strong)NSString *myName;@property(nonatomic,strong)NSString *address;-(Memo *)createMemo;-(void)setMemo:(Memo *)memo;-(void)display;@end

Student.m

////  Student.m//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import "Student.h"#import "Memo.h"@implementation Student-(Memo *)createMemo {    return [[Memo alloc] initWithName:_myName andWithAddress:_address];}-(void)setMemo:(Memo *)memo{    _myName = [memo getName];    _address = [memo getAddress];}-(void)display{    NSLog(@"State is name:%@;address:%@",_myName,_address);}@end

上面這個是Student。然后看一下具體的調用:

////  ViewController.m//  memoDemo////  Created by zhanggui on 15/8/8.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import "ViewController.h"#import "Memo.h"#import "Caretaker.h"#import "Student.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    Student *stu1 = [[Student alloc] init];    [stu1 setMyName:@"zhangsan"];    [stu1 setAddress:@"he nan xin xiang"];    [stu1 display];            //use caretaker to save old name and address    Caretaker *careTaker = [[Caretaker alloc] init];    [careTaker setMemo:[stu1 createMemo]];        //updated name and address    [stu1 setMyName:@"zhangxiaoqiang"];    [stu1 setAddress:@"bei jing san huan"];    [stu1 display];            //back to old name and address    [stu1 setMemo:[careTaker memo]];    [stu1 display];}@end

也就是把zhangsan原來的姓名和地址先保存到備忘錄中,可是過了一段時間zhangsan不行用自己的新名字和地址了,所有就通過備忘錄來還原自己的姓名和地址。

附:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品福利片| 欧美亚洲另类在线| 色婷婷成人综合| 国产91免费看片| 亚洲精品日韩激情在线电影| 日韩不卡中文字幕| 日韩高清有码在线| 国产视频欧美视频| 亚洲最大福利网站| 亚洲精品国产精品久久清纯直播| 亚洲成人黄色网| 国产亚洲视频在线观看| 亚洲精品之草原avav久久| 国产自摸综合网| 日韩中文娱乐网| 欧美日韩国产一区二区三区| 俺去了亚洲欧美日韩| 亚洲国产欧美一区二区三区同亚洲| 久久综合伊人77777尤物| 亚洲第一偷拍网| 久久久人成影片一区二区三区观看| 国产欧美日韩中文| 国产精品一久久香蕉国产线看观看| 欧美日韩精品在线播放| 亚洲欧美日韩天堂一区二区| 亚洲小视频在线| 久久99久久亚洲国产| 亚洲最新视频在线| 综合网中文字幕| 国内免费精品永久在线视频| 日韩中文有码在线视频| 深夜福利日韩在线看| 亚洲国产日韩欧美在线动漫| 亚洲成人在线视频播放| 亚洲伦理中文字幕| 91精品久久久久久久久中文字幕| 久久人人爽人人爽人人片av高请| 国产精品第3页| 亚洲精品aⅴ中文字幕乱码| 色综合视频网站| 91久久嫩草影院一区二区| 精品高清美女精品国产区| 欧美丰满片xxx777| 日本91av在线播放| 成人黄色在线免费| 国产成人久久久| 亚洲bt欧美bt日本bt| 久久精品国产电影| 国产视频在线观看一区二区| 日韩成人高清在线| 亚洲少妇中文在线| 久久久亚洲国产天美传媒修理工| 欧美日韩午夜激情| 国产精品稀缺呦系列在线| 国产亚洲欧美一区| 欧美亚洲午夜视频在线观看| 在线观看欧美视频| 国产精品18久久久久久麻辣| 欧美精品videosex极品1| 日韩福利伦理影院免费| 亚洲色在线视频| 久久全国免费视频| 久久亚洲国产精品成人av秋霞| 亚洲国产高清高潮精品美女| 91精品国产精品| 伊人一区二区三区久久精品| 久久99久久久久久久噜噜| 久久视频在线观看免费| 欧美资源在线观看| 国产一区视频在线| 日韩电影中文字幕| 国产精品青草久久久久福利99| 久久亚洲国产精品| 欧美激情精品久久久久久黑人| 欧美精品免费在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品福利片| 国产精品一区二区电影| 日韩成人网免费视频| 在线性视频日韩欧美| 中文字幕亚洲图片| 日本人成精品视频在线| 亚洲美女av在线播放| 久久精品视频亚洲| 欧美日韩成人免费| 久久香蕉频线观| 久久久国产精品亚洲一区| 97精品一区二区视频在线观看| 国产精品永久免费在线| 亚洲字幕一区二区| 久久好看免费视频| 成人在线视频福利| 成年人精品视频| 国产精品人成电影| 亚洲欧美一区二区三区情侣bbw| xvideos成人免费中文版| 日产精品99久久久久久| 日韩成人av网址| 日韩高清欧美高清| 欧美限制级电影在线观看| 欧美日本亚洲视频| 欧美极品少妇xxxxⅹ喷水| 日本人成精品视频在线| 最新69国产成人精品视频免费| 欧美影院在线播放| 青青草99啪国产免费| 国产精品免费一区二区三区都可以| 日韩精品www| 欧美最顶级丰满的aⅴ艳星| 国产一区二区久久精品| 国产精品久久久久久搜索| 国产精品免费网站| 国产精品96久久久久久| 最近2019中文字幕一页二页| 日韩高清av在线| 日韩免费黄色av| 欧美日韩国产在线播放| 国产日韩中文字幕在线| 日韩av色在线| 丝袜美腿精品国产二区| 91久久精品美女| 国产精品99一区| 国产精品xxx视频| 97avcom| 欧美在线中文字幕| 欧美激情国内偷拍| 亚洲精品电影久久久| 欧美丝袜一区二区三区| 日韩大片在线观看视频| 亚洲精品国产综合久久| 国产精品一区二区av影院萌芽| 性视频1819p久久| 黄色成人av在线| 在线一区二区日韩| 国产欧美一区二区三区四区| 日本精品久久久久影院| 国产综合在线视频| 欧美日韩国产色视频| 日韩精品中文字幕久久臀| 日韩欧美在线播放| 亚洲精品成人av| 91在线网站视频| 国产91精品视频在线观看| 欧美在线国产精品| 中文欧美在线视频| 欧美黑人巨大xxx极品| 欧美日韩国产精品一区| 精品人伦一区二区三区蜜桃免费| 亚洲女同精品视频| 精品国产一区av| 欧美限制级电影在线观看| 热草久综合在线| 国产精品一区av| 亚洲第一福利网| 亚洲电影第1页| 久久成人18免费网站| 黄色91在线观看| 欧美日韩裸体免费视频| 97在线观看免费| 精品亚洲永久免费精品| 福利二区91精品bt7086| 日韩av电影手机在线观看| 亚洲成人黄色网| 91久久久久久久久久久|