代理模式
所有的设计模式都有一个固定的规范
功能类:
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