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

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

讀書筆記-常用設計模式之觀察者模式

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

1、觀察者(Observer)模式也叫發布/訂閱(Publish/Subscribe)模式,是MVC(模型-視圖-控制器)模式的重要組成部分。在軟件系統中,一個對象狀態改變也會連帶影響其他很多對象的狀態發生改變。能夠實現這一需求且復用性強,對象之間匿名通信的,觀察者模式是其中最適合的一個。

2、觀察者模式的類圖如下:

 它有四個角色:

抽象主題(Subject):在Objective-C中,抽象主題是一個協議,它是觀察者集合容器,定義了添加觀察者(attach)方法、移除觀察者(detach)方法和為所有觀察者發送通知的方法(notifyObserver)。

抽象觀察者(Observer):在OC中,抽象觀察者是一個協議,它是一個更新(update)方法。

具體觀察者(ConcreteObserver):Observer協議的具體實現。

具體主題(ConcreteSubject):Subject協議的具體實現。

引入Subject和Observer這兩個協議后,不僅提高了系統的可復用性,還降低了耦合度。

抽象觀察者(Observer)和抽象主題(Subject)的實現代碼如下:

 1 // 2 //Observer.h  3 //ObserverPattern  4 // 5 @PRotocol Observer  6 @required 
-(void)update; 7 @end 8 9 //10 //Subject.h11 //ObserverPattern12 //13 @class Observer;14 @protocol Subject15 @required16 -(void)attach:(Observer*) observer; 17 -(void)detach:(Observer*) observer; 18 -(void)notifyObservers;19 @end

具體觀察者(ConcreteObserver)的實現代碼如下:

////ConcreteObserver.h//ObserverPattern//#import "Observer.h"@interface ConcreteObserver : NSObject <Observer> @end////ConcreteObserver.m//ObserverPattern//#import "ConcreteObserver.h"@implementation ConcreteObserver//只是做了個輸出處理-(void)update{        NSLog(@"ConcreteObserver : %@",self); }@end

下面是具體主題(ConcreteSubject)的實現代碼:

////ConcreteSubject.h//ObserverPattern//#import "Subject.h"@class Observer;@interface ConcreteSubject : NSObject <Subject>{        NSMutableArray* observers;}@property (nonatomic ,strong) NSMutableArray* observers;+(ConcreteSubject*)sharedConcreteSubject;@end////ConcreteSubject.m //ObserverPattern//#import "ConcreteSubject.h" @implementation ConcreteSubject@synthesize observers;static ConcreteSubject *sharedConcreteSubject = nil;+(ConcreteSubject*)sharedConcreteSubject{        static dispatch_once_t once;        dispatch_once(&once, ^{            sharedConcreteSubject = [[self alloc] init];            sharedConcreteSubject.observers = [[NSMutableArray alloc] init]; });        return sharedConcreteSubject;}-(void)attach:(Observer*) observer{        [self.observers addObject:observer];}-(void)detach:(Observer*) observer{        [self.observers removeObject:observer];}-(void)notifyObservers{        for (id obs in self.observers)        {           [obs update];        }} @end

因為ConcreteSubject只需要一個實例,所以我們采用單例設計模式實現。

3、通知機制和KVPO機制

在Cocoa Touch框架中,觀察者模式的具體應用有兩個-通知(notification)機制和KVO(Key-Value-Observing)機制。

3.1、通知機制

通知機制和委托機制不同的是,前者是“一對多”的對象之間的通信,后者是“一對一”的對象之間的通信。

如圖,在通知機制中對某個通知感興趣的所有對象都可以成為接收者。首先,這些對象需要向通知中心(NSNotificationCenter)發出addObserver:selector:name:object:消息進行注冊,在投送對象投送通知給通知中心時,通知中心就會把通知廣播給注冊過的接收者。所有的接收者都不知道通知是誰投送的,更不關系它的細節。投送對象與接收者是一對多的關系。接收者如果對通知不再關注,會給通知中心發出removeObserver:name:object:消息接觸注冊,以后不再接收通知。

代碼示例:主界面控制器MainViewController和翻轉界面控制器FilpsideViewController,此外還有應用程序委托對象AppDelegate。我們將兩個視圖控制器座位通知的接收者,應用程序委托對象作為通知投送對象。

在MainViewController和FilpsideViewController這兩個視圖控制器中,注冊通知接收者的代碼如下:

1 - (void)viewDidLoad2 {3     [super viewDidLoad];4     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTerminate:) name:@"AppWillTerminateNotification" object:nil];5 ?????????????}

解除注冊代碼類似,通過NSNotificationCenter發出removeObserver消息實現。對于一般的OC對象可以在dealloc方法中發出消息。對于視圖控制器,也可以在didReceiveMemoryWarning方法或viewDidUnload方法中發出消息。

1 - (void)dealloc2 {3 [[NSNotificationCenter defaultCenter] removeObserver:self];4 }

MainViewController和FilpsideViewController處理通知的方法基本相同

1 #pragma mark - 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品青青大伊人av| 国产精品第一区| 伊人亚洲福利一区二区三区| 美日韩丰满少妇在线观看| 亚洲三级av在线| 国产成人精品免高潮费视频| 国产精品丝袜高跟| 91国内免费在线视频| 日韩中文字幕网| 亚洲xxxxx性| 亚洲精品黄网在线观看| 91精品国产91久久| 国产精品毛片a∨一区二区三区|国| 亚洲精品www| 欧美日韩在线另类| 91免费看片网站| 久久亚洲私人国产精品va| 粗暴蹂躏中文一区二区三区| 欧美激情网站在线观看| 欧美激情伊人电影| 欧美日韩国产一区二区| 91久久久久久| 欧美精品成人91久久久久久久| 日本欧美爱爱爱| 亚洲在线一区二区| 亚洲美女免费精品视频在线观看| 欧美怡红院视频一区二区三区| 日韩美女中文字幕| 久久精品欧美视频| 日韩av免费一区| 国产999精品久久久影片官网| 欧美成人精品激情在线观看| 国产精品草莓在线免费观看| 日韩在线观看免费全| 国产精品私拍pans大尺度在线| 成人激情电影一区二区| 欧美电影在线播放| 亚洲精品av在线播放| 欧美精品www| 亚洲福利视频久久| 中文字幕综合在线| 日韩av最新在线观看| 中文字幕精品一区久久久久| 国产精品自产拍高潮在线观看| 国产精品久久电影观看| 国产欧美久久久久久| 欧美在线一级va免费观看| 精品丝袜一区二区三区| 亚洲已满18点击进入在线看片| 久久色在线播放| 欧美日韩成人精品| 久久精品视频在线播放| 欧美日韩亚洲国产一区| 久久精品久久久久久国产 免费| 成人精品视频99在线观看免费| 国产91精品在线播放| 欧美日产国产成人免费图片| 亚洲电影免费观看高清| 国产a∨精品一区二区三区不卡| 精品久久久久久久大神国产| 亚洲精品电影在线观看| 欧美性猛交xxxxx水多| 国产日韩精品在线播放| 成人午夜激情免费视频| 亚洲第一精品夜夜躁人人爽| 久久91精品国产| 日韩免费看的电影电视剧大全| 欧美精品亚州精品| 亚洲欧美日韩国产中文| 日韩欧美在线国产| 国产视频久久久久久久| 欧美裸体xxxxx| 亚洲无av在线中文字幕| 国产精品日日做人人爱| 日韩美女视频在线观看| 日韩中文视频免费在线观看| 欧美亚洲国产精品| 在线观看日韩www视频免费| 久久久精品一区二区| 性金发美女69hd大尺寸| 国产精品久久久久久久app| 91chinesevideo永久地址| 国产视频亚洲精品| 国产精品久久久久久久久久小说| 日韩欧美国产激情| 精品福利视频导航| 亚洲精品在线91| 九九精品在线视频| 最近2019中文字幕mv免费看| 久久精品视频在线播放| 国产一区二区三区免费视频| 久久久久在线观看| 一区国产精品视频| 久久久久久亚洲精品不卡| 日韩欧美亚洲范冰冰与中字| 欧美日韩亚洲精品内裤| 欧美成人一区二区三区电影| 91精品国产免费久久久久久| 国产精品2018| 中文字幕亚洲专区| 亚洲欧美在线播放| 日韩精品在线视频观看| 日韩精品免费在线播放| 日韩欧美在线国产| 国产精自产拍久久久久久蜜| 亚洲性夜色噜噜噜7777| 久久精品国产欧美亚洲人人爽| 91色p视频在线| 不卡av电影在线观看| 精品国内亚洲在观看18黄| 欧美在线观看网站| 欧美大片免费观看在线观看网站推荐| 日本精品性网站在线观看| 久久久精品美女| 久久人人爽人人| 2021国产精品视频| 国产男女猛烈无遮挡91| 亚洲精品v欧美精品v日韩精品| 91精品国产91久久久久久久久| 日韩欧美成人免费视频| 一区二区三区回区在观看免费视频| 欧美亚洲国产视频| 国产不卡一区二区在线播放| 亚洲精品99久久久久| 久久久精品日本| 日韩视频―中文字幕| 久久久影视精品| 精品国产鲁一鲁一区二区张丽| 亚洲国产成人爱av在线播放| 亚洲欧美一区二区三区久久| 亚洲电影免费观看高清完整版在线| 国产精品欧美亚洲777777| 人人爽久久涩噜噜噜网站| 久久久女女女女999久久| 亚洲欧美在线x视频| 一本色道久久88精品综合| 日韩精品高清视频| 日韩视频在线观看免费| 亚洲香蕉av在线一区二区三区| 欧美日韩国产精品| 久久精品国产91精品亚洲| 国产精品欧美日韩久久| 中文字幕视频一区二区在线有码| 国产精品久久二区| 久久久亚洲影院你懂的| 亚洲人线精品午夜| 国产精品自产拍高潮在线观看| 日本中文字幕不卡免费| 亚洲电影在线看| 亚洲国产成人精品久久| 日韩成人在线免费观看| 久久精品久久精品亚洲人| 5566成人精品视频免费| 粉嫩av一区二区三区免费野| 亚洲精品日韩激情在线电影| 国产日韩精品视频| 欧美做爰性生交视频| 国外成人在线直播| 精品福利在线看| 亚洲无线码在线一区观看| 久久精品色欧美aⅴ一区二区| 国产成人精品免费久久久久| 亚洲精品乱码久久久久久金桔影视| 国产精品久久久久久亚洲影视|