A --- Delegate的设计步骤
1、委托方制订一套协议(在委托方的.h文件中),协议中声明委托方需要让代理方执行的方法(只有方法声明)。
2、委托方声明一个delegate属性(assign修饰),存储代理方对象。
3、代理方需要遵守协议,并且对协议中的方法进行实现。
4、将代理方设置为委托方的代理人(将代理方对象赋值给委托方对象的delegate属性,进行存储)。
5、委托方在合适的时机通知代理方对象去执行相应的操作
B --- Delegate案例
-----案例-----
有一个女孩结婚之前需要自己洗衣服,做饭,挣钱养活自己;
但是有一天女孩自己不想自己做饭,洗衣服,挣钱养活自己,因此她想要找一个代理人帮她做,于是就想到了结婚。
----案例分析----
对于做饭,洗衣服,挣钱养活自己这些事情女孩不想自己做,想要找一个男孩帮她做得过程是一个明显的代理设计模式。其中女孩在该过程中是委托人,跟他结婚的那个男孩是代理人,那么如何通过代理设计模式来实现该过程
------ 实现步骤1---->女孩制定协议-----
在女孩的.h文件中声明协议GirlDelegate
@protocol GirlDelegate<NSObject>
- (void)cooking; // 做饭
- (void)makeMoney //挣钱养活自己
@optional
- (void)washing; //洗衣服
@end
-------步骤2---->女孩定义delegate属性
在女孩的.h文件中声明协议GirlDelegate
@interface Girl : NSObject
@property (nonatomic,assign)id<GirlDelegate>delegate; //声明delegate属性存储代理人对象。<>代表遵循协议;assign代表女孩只拥有这个男孩的使用权;
--------步骤3---->男孩遵守协议并实现协议方法
男孩遵守协议(男孩的.h文件中)
#import<Foundation/Foundation.h>
#import"Girl.h"
@interface Boy:NSObject<GirlDelegate>
@end
@implementation Boy
- (void)cooking
{
NSLog(@"给老婆做饭");
}
-( void)makeMoney{
NSLog(@"挣钱养活老婆");
}
//洗衣服的操作可以选择实现
- (void)washing{
NSLog(@"为老婆洗衣服");
}
@end
----------步骤4--->将男孩设置为女孩的代理人
在 main.m文件中完场操作
//创建男孩对象
Boy *boy = [[Boy alloc] init];
//创建女孩对象
Girl *girl = [[Girl alloc] init]
//将男孩设置为女孩的代理对象
girl.delegate = boy;
--------步骤5---->女孩在合适的时机通知男孩做相应的操作
//模拟饥饿的操作
if ( [ girl.delegate respondsToSelector : @selectors (cooking) ){
[ girl.delegate cooking];
}
注:respondsToSelector:该方法判断对象是否能够对某一个选定的方法作出响应
总结:当某些任务我们自己不想去实现,想让别人去实现的时候,就可以使用代理设计模式。