iOS与设计模式八 :观察者模式
来源:互联网 发布:mac安装jdk1.8 编辑:程序博客网 时间:2024/05/17 02:36
定义一个消息类Subject,其他类向消息类注册自己,当消息类刷新消息时,就会通知每个注册类。
@interface Subject : NSObject{ NSMutableArray *observerArray; //添加观察者的数组}+ (id)defaultSubject;- (void)subjectAddObserver:(id)observer withReceiveNotiMethod:(NSString *)method; //添加观察者和观察者接收消息的方法- (void)subjectDelObserver:(id)observer;- (void)subjectPostNotificationWithObject:(NSString *)value; //状态改变,发送通知给观察者@end#import "Subject.h"static Subject *subject; //这里使用一个单例@implementation Subject+ (id)defaultSubject{ if (!subject) { subject = [[Subject alloc]init]; } return subject;}- (id)init{ self = [super init]; if (self) { observerArray = [[NSMutableArray alloc]init]; } return self;}- (void)subjectAddObserver:(id)observer withReceiveNotiMethod:(NSString *)method{ NSArray *array = [NSArray arrayWithObjects:observer,method, nil]; BOOL isExist = NO; for(NSArray *array in observerArray) { if ([[array objectAtIndex:0] isEqual:observer]) { isExist = YES; break; } } if (!isExist) { [observerArray addObject:array]; } }- (void)subjectDelObserver:(id)observer{ for(NSArray *array in observerArray) { if([[array objectAtIndex:0] isEqual:observer]) { [observerArray removeObject:observer]; break; } }}- (void)subjectPostNotificationWithObject:(NSString *)value{ for(NSArray *array in observerArray) { id observer = [array objectAtIndex:0]; SEL selector = NSSelectorFromString([array objectAtIndex:1]); if ([observer respondsToSelector:selector]) { //如果可以响应这个方法 [observer performSelector:selector withObject:value]; } }}@interface observerA : NSObject@end@implementation observerA- (void)aMethod [[Subject defaultSubject] subjectAddObserver:self withReceiveNotiMethod:NSStringFromSelector(@selector(receiveChange:))]; [[Subject defaultSubject] subjectPostNotificationWithObject:@"value"]; }- (void)receiveChange:(NSString *)value{ NSLog(@"%@",value);}@end
- iOS与设计模式八 :观察者模式
- iOS设计模式:观察者
- iOS设计模式:观察者
- iOS设计模式:观察者
- iOS 观察者设计模式
- iOS 设计模式 - 观察者模式
- 设计模式(八)观察者模式(Observer)
- 设计模式(八)观察者模式
- JS设计模式八:观察者模式
- 设计模式(八)--观察者模式
- java设计模式之八:观察者模式
- 【iOS设计模式】---- 适配器模式,观察者模式
- iOS设计模式(01):观察者
- iOS设计模式(01):观察者
- iOS设计模式(01):观察者
- iOS设计模式(01):观察者
- iOS设计模式(01):观察者
- iOS设计模式(01):观察者
- eclipse 编码设置
- Android Call requires API level 11 (current min is 8)的解决方案
- JQuery学习笔记:typeof的使用
- c#asp.net url 传递中文参数要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode
- 使GUI适应各种屏幕分辨率
- iOS与设计模式八 :观察者模式
- oracle表空间和用户
- 菜鸟之学习51单片机(二)单片机C语言基础
- Ubuntu下FTP服务器搭建笔记 - vsftpd
- ThreadLocal深入研究-spring
- Qt之打包发布(NSIS详解)
- js中apply方法的使用
- [C++] 右值引用:移动语义与完美转发(C++是一种扼杀生命的语言)
- php是什么