您的位置:首页 > 其它

Protocol and Delegate 协议和代理(设计模式之代理模式)

2015-03-26 16:17 489 查看
delegate 和 protocol 是OC语法的一部分,protocol(协议)我的理解就是定义这么一个东西。以后就按这里的规定来办事。delegate(委托)  就是把事情委托给别人去办。 @required 就是必须去办的。@optional则是可做或不做。1.protocol(协议)首先我定义一个叫GoodChild的协议代码// GoodChild.h#import <Foundation/Foundation.h>@pro4000tocol GoodChild <NSObject>-(void)filialPiety;@end然后我又创建了一个Student类,它实现了GoodChild这个协议// Student.h#import <Foundation/Foundation.h>#import "GoodChild.h"//注意实现协议的语法。@interface Student : NSObject<GoodChild>@end虽然Student.h没有声明方法,但在Student.m文件里,必须实现GoodChild协议里的filialPiety方法。// Student.m#import "Student.h"@implementation Student- (id)init{self = [super init];if (self) {// Initialization code here.}return self;}-(void)filialPiety{NSLog(@"孝敬父母。。");}@end
每个类虽只有一个父类,但可以实现多个协议,以逗号隔开便可。
@interface Student : NSObject<协议1,协议2>

@end

2 委托delegate

boss日常的工作是管理公司、教导新员工、发工资与接电话。

其中管理公司、教导新员工是老板要亲为的。

而发工资与接电话老板希望招聘一个秘书来帮忙,于是对秘书的要求就是要略懂出纳发工资,要能帮助领导接电话。 而这两项要求便是协议,对类功能的限定。
1.老板delegate提出,具体要满足什么功能呢?看SecProtocol协议具体规定了哪些功能。
 1 // Boss.h23 #import <Foundation/Foundation.h>4 #import "SecProtocol.h"5 @interface Boss : NSObject67 //此属性用于指定秘书对象,此对象必须实现SecProtocol协议。8 @property(nonatomic,retain) id<SecProtocol> detegate;9 //管理10 -(void)manage;11 //教导新员工12 -(void)teach;1314 @end
 // SecProtocol.h#import <Foundation/Foundation.h>@protocol SecProtocol <NSObject>//发工资-(void)payoff;//接电话-(void)tel;@end
2.只有实现了这个功能的对象才有资格去接受boss的委托。所以秘书这个对象要想去接受boss的委托,就必须去实现这个协议。
 // mishu.h#import <Foundation/Foundation.h>#import "SecProtocol.h"@interface Sec: NSObject<SecProtocol>@end
3.这样boss就可以delegate给sec这个秘书了。
//实例化老板对象Boss *boss=[[[Boss alloc] init] autorelease];//实例化秘书对象Sec *sec=[[[Sec alloc] init] autorelease];//设置老板的代理对象为秘书
boss.delegate=sec;
这样,boss就有了自己本身定义的方法和协议规定的方法来!
每个类虽只有一个父类,但可以实现多个协议,以逗号隔开便可。
@interface Student : NSObject<协议1,协议2>23 @end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: