委托就是某个对象指定另一个对象处理某些特定任务的设计模式。
下面我们通过一个例子来展示这一点。假设你的老板要做一个APP应用程序,那么他要做所有的工作吗?应该不会,他会将项目拆分成较小的部分,只做其中某部分,并将剩余的工作指派(委托)给其他专业的程序员。因为老板懂得管理,知人善用。
EmployeeProtocl.h文件
#import <Foundation/Foundation.h>
@protocol EmployeeProtocol <NSObject>
@optional //可选
- (void) doOptionalWork;
@required //必须实现
- (void) doRequiredWork;
@end
Employee1.h文件
#import <Foundation/Foundation.h>
#import "EmployeeProtocol.h"
@interface Employee1 : NSObject<EmployeeProtocol>
@end
Employee1.m文件
#import "Employee1.h"
@implementation Employee1
- (void) doRequiredWork
{
NSLog(@"employee1 do required work");
}
@end
Employee2.h文件
#import <Foundation/Foundation.h>
#import "EmployeeProtocol.h"
@interface Employee2 : NSObject<EmployeeProtocol>
@end
Employee2.m文件
#import "Employee2.h"
@implementation Employee2
- (void) doRequiredWork
{
NSLog(@"employee2 do required work");
}
- (void) doOptionalWork
{
NSLog(@"employee2 do optional work");
}
@end
Boss.h文件
#import <Foundation/Foundation.h>
#import "EmployeeProtocol.h"
@interface Boss : NSObject
@property (retain) id <EmployeeProtocol> delegate;
- (void) doWork;
- (void) myWork;
@end
Boss.m文件
#import "Boss.h"
@implementation Boss
@synthesize delegate;
- (void) doWork
{
[delegate doRequiredWork];
if (YES == [delegate respondsToSelector:@selector(doOptionalWork)]) {
[delegate doOptionalWork];
}
[self myWork];
}
- (void) myWork
{
NSLog(@"I am boss and I am working");
}
@end
main.m文件
#import <Foundation/Foundation.h>
#import "Boss.h"
#import "Employee1.h"
#import "Employee2.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Boss *boss = [[Boss alloc] init];
Employee1 *emp1 = [[Employee1 alloc] init];
boss.delegate = emp1;
[boss doWork];
Employee2 *emp2 = [[Employee2 alloc] init];
boss.delegate = emp2;
[boss doWork];
}
return 0;
}
输出结果:
employee1 do required work
I am boss and I am working
employee2 do required work
employee2 do optional work
I am boss and I am working