ios大話 觀察者模式(Observer)
阿新 • • 發佈:2019-01-09
觀察者模式(Observer),定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。
就像這個圖所示
定義抽象通知者
Subject
@interface HCDSubject : NSObject //這裡很不合理,不知怎麼辦 //@property(nonatomic,readwrite,strong)NSMutableArray *observerList; -(void)attach:(id<HCDObserver>)observer; -(void)detach:(id<HCDObserver>)observer; -(void)notify; -(NSArray *)getobserverList; @end
講解:
需要傳入通知物件股票觀察者 nba觀察者
這兩個觀察者抽象為抽象觀察者介面 ,他們之前通過繼承實現相互的關係
抽象觀察者 我們定義成協議即可實現約束介面
@protocol Observer <NSObject>
@optional
-(void)update;
@end
NBA觀察者
#import "Observer.h" @interface NBAObserver :NSObject<Observer> @end #import "NBAObserver.h" @implementation NBAObserver -(void)update{ NSLog(@"擦,老闆回來了,待會兒繼續看NBA"); } @end
Stock觀察者
#import "StockObserver.h" @implementation StockObserver -(void)update{ NSLog(@"操。。老闆回來了,帶會兒再看"); } // // HCDSubject.m // 9觀察者模式 // // Created by yifan on 15/8/13. // Copyright (c) 2015年 黃成都. All rights reserved. // #import "HCDSubject.h" @interface HCDSubject () @property(nonatomic,readwrite,strong)NSMutableArray *observerList; @end @implementation HCDSubject -(instancetype)init{ self = [super init]; if (self) { _observerList = [NSMutableArray array]; } return self; } -(void)attach:(id<HCDObserver>)observer{ [self.observerList addObject:observer]; } -(void)detach:(id<HCDObserver>)observer{ for (id<HCDObserver> currentObserver in [self getobserverList]) { if (currentObserver == observer) { [self.observerList removeObject:observer]; } } } -(NSMutableArray *)getobserverList{ return [NSMutableArray arrayWithArray:self.observerList]; } -(void)notify{ } @end