A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 许本亮 中级黑马   /  2015-11-10 12:02  /  665 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代理模式概念:
传入的对象,代替当前类完成了某个功能,称为代理模式
利用协议实现代理模式的主要思路为:
1)定义一个协议,里面声明代理类需要实现的方法列表,比如BaoMu(代理类)要实现feedBaby与hongSleep方法
2)创建一个代理类(比如BaoMu),遵守上面的代理协议
3)在需要代理的类(Baby)中,定义一个对象,类型为id且遵守代理协议的成员变量(_delegate)
4)在Baby类中调用成员变量_delegate(代理)的set方法,调用代理类(也是协议的)的方法
5)main.m或者其他使用呢Baby类的文件中,为Baby类的成员变量(代理类)赋值
代理模式的应用场合:
1)监听器的场合
  *Teacher想监听Baby的一些行为,Teacher做Baby的代理
2)通知的场合
  *Baby发生一些行为想要告诉Teacher,Teacher做Baby的代理
3)有些事情不想自己做,想要交给别人处理
  *Baby发生一些行为,但是自己不会处理,可以交给Teacher处理,Teacher做Baby的代理
//给婴儿找保姆
//baomuProtocol.h文件
#import <Foundation/Foundation.h>
@class Baby;
@protocol baomuProtocol <NSObject>
- (void)feedBabyEat:(Baby *)baby;
- (void)hongBabySleep:(Baby *)baby;
@end
//Baomu.h文件
#import <Foundation/Foundation.h>
#import "baomuProtocol.h"
@interface Baomu : NSObject<baomuProtocol>
@end
//Baomu.m文件
#import "Baomu.h"
#import "Baby.h"
@implementation Baomu
- (void)feedBabyEat:(Baby *)baby{
   
    baby.blood += 20;
    NSLog(@"保姆正在喂婴儿吃东西,baby.blood = %.2f",baby.blood);
   
}
- (void)hongBabySleep:(Baby *)baby{
    baby.sleep += 30;
    NSLog(@"保姆正在哄婴儿睡觉,baby.sleep = %.2f",baby.sleep);
}
@end
//Baby.h文件

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马