定义
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
场景
- 一个对象的改变将导致其他一个或多个对象也发生改变
- 一个对象必须通知其他对象,而并不知道这些对象是谁
实现
1、UML图
观察者模式.png
2、使用
- 创建主题,被观察类
@interface Subject : NSObject
@property(nonatomic, strong)NSMutableArray *observers;
-(void)attach:(Observer *)observer;
-(void)updateState;
@end
#import "Subject.h"
@implementation Subject
- (instancetype)init
{
self = [super init];
if (self) {
self.observers = [[NSMutableArray alloc] init];
}
return self;
}
- (void)attach:(Observer *)observer{
[self.observers addObject:observer];
}
- (void)updateState{
for(Observer *observer in self.observers){
[observer update];
}
}
@end
- 构建观察者
@interface Observer : NSObject
-(void)update;
@end
#import "Observer.h"
@implementation Observer
- (void)update{
NSLog(@"具体观察者实现");
}
@end
@interface AObserver : Observer
@end
#import "AObserver.h"
@implementation AObserver
- (void)update{
NSLog(@"AObserver update");
}
@end
@interface BObserver : Observer
@end
#import "BObserver.h"
@implementation BObserver
- (void)update{
NSLog(@"BObserver update");
}
@end
- Client调用
Subject *subject = [[Subject alloc] init];
AObserver *aobserver = [[AObserver alloc] init];
[subject attach:aobserver];
BObserver *bobserver = [[BObserver alloc] init];
[subject attach:bobserver];
[subject updateState];
总结
观察者和被观察者是抽象耦合的,建立一套触发机制
代码
链接: https://pan.baidu.com/s/1dPNAk-_Lowyu7--gEEd8Yw 提取码: g7no