代理模式用我們的話來說,就是我要干一件事,但是我不想干,那么我就找一個人來幫我去干這件事。但是干這件事,要根據我得要求來干,這個要求就是協議,我就是雇主,做事的那個人就是代理人。
在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; } |
