[ios]代码库
/*
*代理设计模式听起来很唬人,其实很简单.
*代理设计模式是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) 回复
??
回复评论