用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - ios代码库

[objC]代理设计模式

2014-09-01 作者: Sio举报

[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;
}



网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...