什么是委托
『领导想抽烟,让你帮忙去买包烟,所以你开车去超市买了一包烟』在这句话里面我们拆分下
- 领导:委托发起者
- 想抽烟:委托人想要做的
- 买包烟:委托(协议 protocol)
- 你: 被委托者
- 开车去买烟 : 被委托者的具体实现方法
委托实现
定义协议
实现『烟』的协议,然后声明一个buy
的方法
// cigarette.h
#import <Foundation/Foundation.h>
@protocol Cigarette <NSObject>
@required
- (void) buy;
@end
委托发起人
定义『领导』类,并且领导要抽烟smoke
方法
// leader.h
#import <Foundation/Foundation.h>
#import "cigarette.h"
@interface Leader:NSObject
@property id <Cigarette> delegate;
- (void) smoke;
@end
实现抽烟的具体逻辑,委托了一个人先去买,因为抽烟之前要先买啊
// leader.m
#import <Foundation/Foundation.h>
#import "leader.h"
@implementation Leader
- (void) smoke {
[self.delegate buy];
}
@end
被委托的人
『下属』的具体实现,领导的下属要遵循烟的协议,(不会买烟,还想当好下属)
// worker.h
#import <Foundation/Foundation.h>
#import "cigarette.h"
@interface Worker:NSObject <Cigarette>
@end
『下属』知道了烟的协议,就需要知道买buy
,并且要知道怎么去买
// worker.m
#import <Foundation/Foundation.h>
#import "worker.h"
@implementation Worker
- (void) buy {
NSLog(@"worker drive a car to buy a cigarette");
}
@end
发起委托
好,现在领导想抽烟了,[leader smoke]
我们发现, leader 只会发起smoke ,并不关心烟从哪儿来的具体逻辑实现。
// main.m
#import <Foundation/Foundation.h>
#import "leader.h"
#import "worker.h"
int main() {
@autoreleasepool {
Leader *leader = [Leader new];
Worker *worker = [Worker new];
// 指定一个被委托者
leader.delegate = worker;
// 发起抽烟,具体逻辑被实现
[leader smoke];
}
return 0;
}