观察者模式OC版
来源:互联网 发布:淘宝子账户认证 编辑:程序博客网 时间:2024/06/06 17:14
当一个对象状态发生改变,所有依赖于他订阅者都会发生改变(收到状态改变的通知)。
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
- 观察者模式OC版
- oC语言 KVC观察者模式
- oc语言 KVO观察者模式
- 观察者模式Swift版
- 观察者模式android版
- OC-观察者练习练习
- 观察者模式(python版)
- 观察者模式(java版)
- java 观察者模式 简明版
- 设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)
- [设计模式as3版]二.观察者模式
- 大话设计模式java版--观察者模式
- 大话设计模式java版:观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- erlang基础入门
- [BZOJ 2818] Gcd 线性筛+欧拉函数前缀和
- 栈的应用--括号匹配的检验
- Search Insert Position
- WIN7、WIN10下顺利使用S7-200编程软件的方法:
- 观察者模式OC版
- 条件随机场(CRF)
- 怎么限制一个应用程序进程使用指定的cpu
- DEV C++ 界面设置
- 欢迎使用CSDN-markdown编辑器
- idea安装步骤
- spark shuffle详解
- Linux搭建hexo环境
- 我来告诉你怎么计算i++ + ++i + i++以及为什么i++和++i区别这么大?