当前位置: 首页 > news >正文

临沂网站建设团队/成都短视频代运营

临沂网站建设团队,成都短视频代运营,贵阳新闻最新消息今天,建设银行手机网站变观察者模式也被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式中,一个目…

观察者模式也被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。iOS开发中最明显的观察者模式就是KVO键值对观察,如果对于KVC和KVO不是很熟悉,可以参考本人之前博客iOS开发-KVC和KVO的理解。

关于设计模式网上的介绍多如牛毛,参考资料随手可查,简单的使用OC实现一下观察者模式,我们举一个实际工作的例子,猎头和程序员的故事,简单的就是一个猎头手里面有多个候选人的信息,一旦公司有新的工作机会,会通知所有的候选人,基于以上信息,我们通过观察者模式很容易实现。

主题对象基类:

1
2
3
4
5
6
7
8
9
@interface Subject : NSObject
-(void)registerObserver:(id)observer;
-(void)deleteObserver:(id)observer;
-(void)notifyObservers;
@end

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@interface Subject()
@property  (strong,nonatomic)  NSMutableArray  *observers;
@end
@implementation Subject
-(void)registerObserver:(id)observer{
    [self.observers addObject:observer];
}
-(void)deleteObserver:(id)observer{
    [self.observers removeObject:observer];
}
-(void)notifyObservers{
    for (NSInteger i=0; i<[self.observers count]; i++) {
        Observer  *observer=(Observer *)[self.observers objectAtIndex:i];
        [observer updateState:self observer:observer];
    }
}
//getter and  setter
-(NSMutableArray *)observers{
    if(!_observers){
        _observers=[[NSMutableArray alloc]init];
    }
    return _observers;
}
@end

猎头(Hunter)实现基类:

1
2
3
4
5
6
7
8
@implementation Hunter
-(void)updateInfo:(NSString *)personName{
    self.personName=personName;
    [self notifyObservers];
}
@end

观察者(Observer)基类:

1
2
3
4
5
@interface Observer : NSObject
-(void)updateState:(id)subject  observer:(id)observer;
@end

程序员(Programmer)定义:

1
2
3
4
5
6
7
@interface Programmer :Observer
@property  (strong,nonatomic) NSString  *programmerName;
-(instancetype)initWithName:(NSString *)name;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@implementation Programmer
-(instancetype)initWithName:(NSString *)name{
    self=[super init];
    if (self) {
        self.programmerName=name;
    }
    return self;
}
//原文地址:http://www.cnblogs.com/xiaofeixiang/
-(void)updateState:(id)subject observer:(id)observer{
    NSLog(@"伙计们,XX要招聘了,有意的赶紧联系我");
    Hunter *hunter=(Hunter *)subject;
    Programmer  *programmer=(Programmer *)observer;
    NSLog(@"%@---%@",hunter,programmer);
}
@end

测试观察者效果:

1
2
3
4
5
6
7
Hunter  *hunter=[[Hunter alloc]init];
Programmer *programmer=[[Programmer alloc]initWithName:@"iOS开发工程师"];
NSLog(@"博客园-FlyElephant");
[hunter registerObserver:programmer];
[hunter updateInfo:@"原文地址:http://www.cnblogs.com/xiaofeixiang/"];
[hunter deleteObserver:programmer];
[hunter updateInfo:@"iOS技术交流:228407086"];

  

测试一切OK,如有不当,欢迎讨论~

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/5084224.html,如需转载请自行联系原作者


http://www.lbrq.cn/news/1610677.html

相关文章:

  • 网站建设平台软件哪个好用/app优化排名
  • 龙华附近网站建设/广州新闻播报
  • 河北住房建设厅网站/长尾关键词查询工具
  • 网站建设.龙兵/北京网站排名seo
  • 常州网站制作/深圳优化公司高粱seo较
  • 赣州网站开发/seo优化是什么
  • 做网站的图哪来/新闻软文广告
  • 南京做网站建设搭建的公司/做网站公司
  • 中文域名和网站的关系/2022适合小学生的简短新闻
  • 深圳设计之都/百度关键词优化软件网站
  • 网站的排版问题/网站优化 福州
  • 广州建设网站是什么关系/seo关键词推广渠道
  • 做tb任务赚钱的网站/搜索引擎营销的方法包括
  • wordpress网址导航开源/秦皇岛seo招聘
  • 深圳手机商城网站设计多少钱/厦门网站的关键词自动排名
  • 淮安做网站服务单位/网站排名查询
  • 湛江做寄生虫网站/近期时事新闻10条
  • win7系统做网站服务器系统/网站定制开发
  • 网站设计与建设公司/北京seo专业团队
  • wordpress评论框required/河北seo技术培训
  • 在凡科网申请的网站设置网页访问密码/网络营销的四大要素
  • 教你做面膜v官方网站/青岛seo
  • 做网站公司上海/企业网站官网
  • 杭州app开发公司集中/海淀区seo引擎优化多少钱
  • 做网商哪个国外网站好/怎么联系百度客服
  • 专业北京网站建设公司排名/怎样做自己的网站
  • 打金传奇rmb回收/下载班级优化大师app
  • 建设适应连锁行业网站/营销策划书案例
  • 团委网站建设的问题及原因/广州新闻最新消息今天
  • html下载网站模板/百度关键词推广帝搜软件
  • 【AI论文】Rep-MTL:释放表征级任务显著性在多任务学习中的潜力
  • SpringBoot学习总结
  • 【Python修仙编程】(二) Python3灵源初探(11)
  • Piriority_queue
  • Docker 镜像打包为 ZIP 文件便于分享和转发
  • 《Java 程序设计》核心知识点梳理与深入探究