代理模式

所有的设计模式都有一个固定的规范

功能类:

  1. 写一套代理(协议)

    代理方法就是回调的方式

      @protocol agentDelegate <NSObject>

    @optional

    //我希望通过这里的方法回调数据

    //使用我这个类来对文本进行配置,用户配置完毕,我通过这个方法将用户配置

    //的数据回调给调用者

    -(void)call:(NSString*)message;

    @end

  2. 声明一个变量记录调用者

    @property(nonatomic,assign)id <agentDelegate> delegate;

  3. 判断调用者是否实现了相应的回调方法(代理方法)

     if ([self.delegate respondsToSelector:@selector(call:)]){

            [self.delegate call:@"租到房子了"];

       } 

使用者:

  1.  服从代理

    @interface Person : NSObject <agentDelegate> 

  2. 设置功能类里面的delegate变量

    告诉功能类,你的回调方法在哪里实现的(谁来接受你的毁掉数据)

    //配置调用者为我当前的这个对象

       ag.delegate = self;

  3. 实现相应的代理方法

    谁接收 谁就实现

    -(void)call:(NSString *)message{

        NSLog(@"%@",message);

    } 

*如果是第三者代理模式,谁接收谁实现

 

栗子栗子栗子:

Person.h

#import <Foundation/Foundation.h>

#import "Agent.h"

@interface Person : NSObject <agentDelegate> 

-(void)needHouse;

-(void)call:(NSString *)message;

@end

Person.m 

#import "Person.h"

#import "Agent.h" 

@implementation Person

-(void)needHouse{

    Agent * ag = [[Agent alloc]init];

    ag.delegate = self;

    [ag rentHouse];   

}

-(void)call:(NSString *)message{

    NSLog(@"%@",message);

} 

@end

Agent.h

@protocol agentDelegate <NSObject>

@optional

-(void)call:(NSString*)message;

@end

 

@interface Agent : NSObject

@property(nonatomic,assign)id <agentDelegate> delegate;

-(void)rentHouse;

@end

Agent.m 

@implementation Agent

-(void)rentHouse{

    NSLog(@"正在租房子");

    if ([self.delegate respondsToSelector:@selector(call:)]){

        [self.delegate call:@"租到房子了"];

    } 

}

@end

posted @ 2015-12-25 16:30  浪味小仙女  阅读(131)  评论(0编辑  收藏  举报