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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS设计模式之观察者模式-精讲

什么是观察者模式?我们先打个比方,这就像你订报纸。比如你想知道美国最近放生了些新闻,你可能会订阅一份美国周刊,然后一旦美国有了新的故事,美国周刊就发一刊,并邮寄给你,当你收到这份报刊,然后你就能够了解...

iOS开发之设计模式(二)观察者模式(Observer)

ios的观察者模式中主要有两种 概念:定义对象间的一种依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 作用:当你需要将改变通知所有的对象时,而你又不知道这些对象...

iOS设计模式之观察者模式

什么是观察者模式?我们先打个比方,这就像你订报纸。比如你想知道美国最近放生了些新闻,你可能会订阅一份美国周刊,然后一旦美国有了新的故事,美国周刊就发一刊,并邮寄给你,当你收到这份报刊,然后你就能够了解...

iOS设计模式之观察者模式

一、观察者模式 观察者模式定义了对象间的一种一对多的依赖关系,以便对象状态发生变化时,依赖于它的对象都能得到通知并自动刷新。 二、OC当中的观察者模式 1、通知中心(NSNotifi...

iOS 设计模式系列:Observer – 观察者模式

在观察者模式中,当状态发生改变的时候,一个对象会通知另一个对象。这个对象不需要知道另一个对象发生了什么改变─因此非常鼓励这种分离式的设计。这种模式经常用于,当一个属性发生改变时通知跟它相关的对象。 ...

设计模式深入学习IOS版(7)观察者模式

1 前言   观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是MVC(模型-视图-控制器)模式的重要组成部分。在IOS的Cocoa Touch里面也有的广泛的...

【推荐】【老外写的iOS设计模式系列】第6部分 观察者模式

观察者(Observer)模式 在观察者模式中,一个对象任何状态的变更都会通知另外的对改变感兴趣的对象。这些对象之间不需要知道彼此的存在,这其实是一种松耦合的设计。当某个属性变化的时候,我们通常...

iOS设计模式之观察者模式

观察者模式: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 何时使用观察者模式 (1): 对一个对象的改变需要同时改变其他对象,而不知...

iOS设计模式之三:适配器模式和观察者模式

适配器(Adapter)模式 适配器可以让一些接口不兼容的类一起工作。它包装一个对象然后暴漏一个标准的交互接口。 如果你熟悉适配器设计模式,苹果通过一个稍微不同的方式来实现它,苹果使用了协...

IOS设计模式之三(适配器模式,观察者模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuz...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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