观察者模式

定义

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

场景

  • 一个对象的改变将导致其他一个或多个对象也发生改变
  • 一个对象必须通知其他对象,而并不知道这些对象是谁

实现

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

你可能感兴趣的:(观察者模式)