本帖最后由 FFFF001 于 2016-8-6 22:54 编辑
#if 0
iOS开发之 delegate 模式理解 (如有错误之处,望请指正...)
delegate
1 * 模式理解 2 * 解析 3 * 模式实现
1. 模式理解 * 代理模式就是:[代理 调用协议的方法] ==> 间接达到某个家伙不想干或干不了的事情. 2. 解析 * 这个模式最主要的就是分清"代理属性"和"代理对象" * 代理属性 指有需求或有要求的一方.比如: 经理通知程序员修改代码. 经理有要求.. 工厂需要招代理商. 工厂有需求... 婴儿需要保姆照顾. 婴儿干不了... 这个时候就可以将代理属性设为需求这一方. 也就是就是在经理,工厂,婴儿类里写上 @property (nonatomic, strong) id <遵循的Protocol> delegate; * 代理对象 指可以协助处理事物的对象.就是遵守协议的一方.他会将协议方法实现.这是他的能力. 说白了就是某件事别人不想干,或干不了,他能处理,就让他干了这件事. 3. 模式实现 * 经理检查代码,觉得代码不合理,通知程序员修改代码
/*-----------------------------协议--------------------------------*/ @protocol XiuGaiDaiMaProtocol <NSObject>
- (void)xiuGaiDaiMa; // 需要找一个能修改代码的人
@end /*-----------------------------经理--------------------------------*/ @interface Manager : NSObject
@property (nonatomic, copy) NSString *name; @property (nonatomic, strong) id <XiuGaiDaiMaProtocol> delegate; // 经理需要个能修改代码的人
- (void)jianChaCode; // 检查代码
@end
@implementation Manager
- (void)jianChaCode { NSLog(@"代码太烂,需要修改.."); // 检查代码发现太烂, 需要程序员修改 [self.delegate xiuGaiDaiMa]; // 检查代码发现太烂, 需要程序员修改 }
@end
/*-----------------------------程序员--------------------------------*/ @interface Programmer : NSObject <XiuGaiDaiMaProtocol>
@property (nonatomic, copy) NSString *name;
@end
@implementation Programmer
- (void)xiuGaiDaiMa { // 程序员的能力,修改代码 NSLog(@"程序员修改代码"); }
@end /*------------------------------实现-------------------------------*/ int main(int argc, const char * argv[]) { Manager *manager_Wang = [[Manager alloc] init]; Programmer *programmer_Li = [[Programmer alloc] init]; manager_Wang.delegate = programmer_Li;
[manager_Wang jianChaCode]; } |