代理模式用我们的话来说,就是我要干一件事,但是我不想干,那么我就找一个人来帮我去干这件事。但是干这件事,要根据我得要求来干,这个要求就是协议,我就是雇主,做事的那个人就是代理人。
在oc中,代理模式,按照顺序注意:
1、需要有代理双方。
2、雇主有需求
3、雇主写协议
4、写实例变量(这个实例变量为id类型,遵守雇主写的协议),添加getter和setter方法。
5、雇主使用代理。
6、代理人签协议
7、代理人遵循协议,
8、代理人完成协议内容。
一个例子:
BFProtocol.h(协议内容,要求别人干什么)
#import <Foundation/Foundation.h> @protocol BFProtocol <NSObject> //默认必须 //买饭 - (void)buyFood; //买饮料 - (void)buyWater; //挣钱 - (void)makeMoney; @end |
Girl.h(雇主)
#import <Foundation/Foundation.h> #import "BFProtocol.h" @interface Girl : NSObject { //男朋友,遵循协议 id<BFProtocol> _boyFriend; } //getter - (id)boyFriend; //setter - (void)setBoyFriend:(id<BFProtocol>)boyFriend; //要吃饭 - (void)eating; //要喝水 - (void)drinking; //要逛街 - (void)shopping; @end |
Girl.m(雇主要干的事)
#import "Girl.h" @implementation Girl //要吃饭 - (void)eating{ //男朋友买饭 [_boyFriend buyFood]; } //要喝水 - (void)drinking{ [_boyFriend buyWater]; } //要逛街 - (void)shopping{ [_boyFriend makeMoney]; } //getter - (id)boyFriend{ return _boyFriend; } //setter - (void)setBoyFriend:(id<BFProtocol>)boyFriend{ _boyFriend = boyFriend; } @end |
Boy.h(代理人)
#import <Foundation/Foundation.h> #import "BFProtocol.h" //遵循协议 @interface Boy : NSObject<BFProtocol> @end |
Boy.m(代理人实现协议内容)
#import "Boy.h" @implementation Boy //实现协议 - (void)buyFood{ NSLog(@"吩咐就是.."); } - (void)buyWater{ NSLog(@"我去买水.."); } - (void)makeMoney{ NSLog(@"逛街..."); } @end |
main.m(雇主使用代理)
#import <Foundation/Foundation.h> #import "Girl.h" #import "Boy.h" int main(int argc, const char * argv[]) { @autoreleasepool { //创建女孩 Girl *girl = [[Girl alloc]init]; Boy *boy = [[Boy alloc ]init]; //找到男朋友 [girl setBoyFriend:boy]; //提要求 NSLog(@"我要吃饭:"); [girl eating]; NSLog(@"我要喝水.."); [girl drinking]; NSLog(@"我要逛街.."); [girl shopping]; } return 0; } |