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