代理模式概念: 传入的对象,代替当前类完成了某个功能,称为代理模式 利用协议实现代理模式的主要思路为: 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文件
|