iOS与设计模式八 :观察者模式

原创 2013年12月09日 21:26:19
定义一个消息类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

回调函数升级版-设计模式(观察者模式)

书接上回,上一周大体写了一下回调函数的使用,这周我就大体说一下设计模式中的观察者模式。我自己认为观察模式就是回调函数的升级版,在用法上。废话少说,直接上图。 这是我正在弄的一个应用,画面有点模仿荔枝...
  • liujianshui
  • liujianshui
  • 2015年07月07日 14:32
  • 780

Java设计模式-回调函数和观察者模式

Android的框架中有非常多的地方使用了回调的模式,例如Activity的生命周期,按钮的点击事件等。 下面是回调的基本模型: public class A { private CallBack...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2015年03月24日 16:20
  • 8980

设计模式--观察者模式、状态模式

【观察者模式】          多个观察者同时监听一个主题,一旦主题对象发生改变便会通知所有的观察者对象,并相应自己的更新事件!                                   ...
  • u012466304
  • u012466304
  • 2014年12月09日 17:40
  • 1935

ios开发中的基本设计模式(代理,观察者,MVC,单例,策略,工厂,MVVM,原型,Target-Action,通知(notification)机制)

(一)代理模式
 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。
 优势:解耦合
敏捷原则:开放-封闭原则
实例:tableview的 数据源delegate,通...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2016年03月12日 20:37
  • 2025

设计模式之观察者模式(Python实现)

下面介绍在学习《深入浅出设计模式》中的第二个设计模式:观察者模式 先定义一下观察者模式:观察者模式定义了对象之间的一对多依赖,这样当一个对象改变状态时,它的所有对象都会收到依赖并且自动更新。 具体...
  • huangkangying
  • huangkangying
  • 2012年08月23日 22:08
  • 3743

设计模式(五)观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听莫一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们...
  • itachi85
  • itachi85
  • 2016年03月02日 17:41
  • 40349

Qt信号槽与观察者模式

qt的核心机制:信号与槽和设计模式中的观察者模式很类似。 https://www.devbean.net/2012/08/qt-study-road-2-custom-signal-slot 这篇...
  • u011391629
  • u011391629
  • 2017年03月20日 21:59
  • 1105

设计模式-深入解析观察者模式(Observer)

在上篇设计模式上我们继续前进把,苦逼(酷毙)的程序员一刻都不能松懈的,要紧跟脚步,每天都学习啊!!学了策略模式,我自己去用设计模式写了几个例子,感觉还扣以啊。下面继续总结一下观察者模式的学习,如有不正...
  • qq_29282475
  • qq_29282475
  • 2015年12月07日 16:16
  • 1314

Unity设计模式:观察者模式

初学编程的时候内容比较少没有数据交互,等内容多到需要多个文件多个类协同运行的时候就涉及到类之间的数据交互了。比较简单的数据交互是这些类之间互相引用,直接或间接传值或调用,但是这样类之间的耦合性太高了,...
  • ylbs110
  • ylbs110
  • 2016年12月31日 08:36
  • 531

PHP设计模式之观察者模式(Observer)详细介绍和代码实例

【意图】 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新【GOF95】 又称为发布-订阅(Publish-Subscribe)模式、模型-视图...
  • longjef
  • longjef
  • 2016年11月02日 09:51
  • 3712
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS与设计模式八 :观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)