观察者模式OC版

观察者模式定义?

                  当一个对象状态发生改变,所有依赖于他订阅者都会发生改变(收到状态改变的通知)。

 2、观察者模式-应用场景?

                  场景一:关联场景

                  场景二:事件多级触发

                  场景三:跨系统消息交互场景

 3、观察者模式-角色划分?

                  四个角色?

                  角色一:被观察者(目标对象->抽象)

                  角色二:具体被观察者(目标对象)

                  角色三:观察者

                  角色四:具体观察者

 代码示例:

抽象被观察者:

#import "Observable.h"

@interface Observable()

@property (nonatomic,strong)NSMutableArray *obsArray;

@end

@implementation Observable

- (instancetype)init

{

    self = [superinit];

    if (self) {

        _obsArray =[[NSMutableArrayalloc]init];

    }

    return self;

}

//注册观察者

- (void)addObserver:(id<Observer>)o{

    

    [_obsArray addObject:o];

}

//取消观察者

- (void)cancelObserver:(id<Observer>)o{

    

    [_obsArrayremoveObject:o];

}

//取消所有观察者

- (void)cancelAllObservers{

    

    [_obsArrayremoveAllObjects];

}

//获得所有观察者

- (NSInteger)countObservers{

    

    return_obsArray.count;

}

//发送通知

-(void)notifyObservers{

    

    [selfnotifyObservers:nil];

}

-(void)notifyObservers:(NSObject*)msg{

    

    for (id<Observer>oin_obsArray) {

        [o update:selfmsg:msg];

    }

}

@end

抽象观察者协议:

#import <Foundation/Foundation.h>

@class Observable;

//观察者->抽象

@protocol Observer <NSObject>

-(void)update:(Observable*)o msg:(NSObject*)msg;

@end

具体观察者1:

.h

#import <Foundation/Foundation.h>

#import "Observer.h"

@interface specificObserver1 : NSObject<Observer>

@end

.m

#import "specificObserver1.h"

@implementation specificObserver1

- (void)update:(Observable *)o msg:(NSObject *)msg{

    

    NSLog(@"具体观察者1收到--%@",msg);

    

}

@end

具体观察者2:

.h

#import <Foundation/Foundation.h>

#import "Observer.h"

@interface specificObserver2 : NSObject<Observer>

@end

.m

#import "specificObserver2.h"

@implementation specificObserver2

- (void)update:(Observable *)o msg:(NSObject *)msg{

    

    NSLog(@"具体观察者2收到--%@",msg);

    

}

@end

测试调用类:

- (void)demo1{//抽象的被观察者测试

    

    Observable  *obs = [[Observable alloc]init];

    id<Observer>specific1 = [[specificObserver1 alloc]init];

    id<Observer>specific2 = [[specificObserver2 alloc]init];

    [obs addObserver:specific1];

    [obs addObserver:specific2];

    [obs notifyObservers:@"测试发送消息"];

}

代码demo




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值