/* |
*代理设计模式听起来很唬人,其实很简单. |
*代理设计模式是objc的重点,任何一本书都有 |
*%%以下代码在无代码提示下盲敲,不要直接复制,手动输入会大大提高正确率 |
*Author:S.Sio |
*/ |
#import <Foundation/Fondation.h> |
@protocal Cook //你需要一个协议,这个协议定义的名称应该是一种功能的统称,这样有利于程序的设计 |
@required //一定实现的方法 |
-( void )cookRice; //做饭这个功能应该是属于烹饪必备的技能。所以如果把协议定义为做饭(RiceCooker)就非常不合适,定义成厨师(Chef)也不合适 |
@optional //可选择性实现的方法 |
-( void )matFloor; //有的人做完饭同样也会擦地,而不一定所有做饭的人都擦地 |
@end |
//@class "Cook.h" 如果是外部协议 |
@interface Chef:NSObject <Cook> |
{ |
static int skill=3; //这里用一个整型代替了枚举,以方便理解,代表这个人(对象)的手艺等级 |
} |
|
@end |
@implement Chef |
-( void )cookRice{ |
NSLog(@ "手艺真不错" ); |
} |
@end |
//接下来就是委托代理的持有事物(对象) |
#import"Cook.h" //唯一你需要知道的是代理所具备的协议而并不是 |
@interface Restaurant:NSObject{ //定义饭店类 |
id _delegate; |
} |
@property (nonatomtic) id delegate; |
-(instanceType)initWithDelegate:(id <Cook>) cooker; |
@end |
@implement Restaurant |
@sythesize delegate = _delegate; |
-(instanceType)initWithDelegate:(id <Cook>) cooker{ //初始化做饭的人 |
[super init]; |
if (self){ |
self.delegate = cooker; |
} |
return self. class ; |
} |
/* //高级代理设计:1 |
-(void)wantMakeRice{ |
if([self.delegate responceToSelector:@Selector(cookRice)]){ |
[self.delegate cookRice]; |
} |
} |
*/ |
} |
@end |
//运行函数 |
int main( void ){ |
Chef *jack = [Chef new ]; //new 一个代理 |
Restaurant *burgerKing = [[Restaurant alloc]initWithDelegate:jack]; //初始化送入一个代理 |
[bugerKing.delegate cookRice]; //使用代理的cookRice |
return 0; |
} |
by: 发表于:2017-10-13 10:11:39 顶(0) | 踩(0) 回复
??
回复评论