1. 程式人生 > >ios大話 觀察者模式(Observer)

ios大話 觀察者模式(Observer)

觀察者模式(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