简单的协议应用-代理模式
协议(protocol):
<> 遵守某个协议,只要遵守了这个协议,相当于拥有协议里面的所有方法声明
- 声明一系列方法
- 编译器不强求实现协议里所有的方法
- 分类和协议都只能声明方法,不能声明成员变量
- NSObject是基协议
假设一个人要买票,但是他没有空,需要一个代理去帮他问问票价多少啊,还有几张票啊~
协议TicketDelegate.h,这里指代理所需要拥有的方法。
// // TicketDelegate.h // 协议的应用-代理模式 // // Created by Mekor on 14-8-30. // Copyright (c) 2014年 Mekor. All rights reserved. // #import <Foundation/Foundation.h> //声明一些跑腿方法 @protocol TicketDelegate <NSObject> //返回票价 -(double)ticketPrice; //还剩多少张票 -(int)leftTicketsNumber; @end
人类:
// // main.m // 协议的应用-代理模式 // // Created by Mekor on 14-8-30. // Copyright (c) 2014年 Mekor. All rights reserved. // #import <Foundation/Foundation.h> #import "TicketDelegate.h" @interface Person : NSObject - (void) buyTicket; // 拥有一个代理属性 // id代表代理的类名随便 // 但必须遵守TicketDelegate协议 @property (nonatomic, retain) id<TicketDelegate> delegate; @end
// // Person.m // 协议的应用-代理模式 // // Created by Mekor on 14-8-30. // Copyright (c) 2014年 Mekor. All rights reserved. // #import "Person.h" @implementation Person //买电影票 -(void)buyTicket { //叫代理帮自己去买票 double price=[_delegate ticketPrice]; int number=[_delegate leftTicketsNumber]; NSLog(@"通过代理的帮助,票价=%f,还剩%d张票",price,number); } @end
代理:
// // Agent.h // 协议的应用-代理模式 // // Created by Mekor on 14-8-30. // Copyright (c) 2014年 Mekor. All rights reserved. // #import <Foundation/Foundation.h> #import "TicketDelegate.h" @interface Agent : NSObject<TicketDelegate> @end
// // Agent.m // 协议的应用-代理模式 // // Created by Mekor on 14-8-30. // Copyright (c) 2014年 Mekor. All rights reserved. // #import "Agent.h" @implementation Agent //剩余的票数 -(int)leftTicketsNumber { return 1; } //每一张票多少钱 -(double)ticketPrice { return 1000; } @end
main.m文件
1 // 2 // main.m 3 // 协议的应用-代理模式 4 // 5 // Created by Mekor on 14-8-30. 6 // Copyright (c) 2014年 Mekor. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import "Person.h" 11 #import "Agent.h" 12 int main(int argc, const char * argv[]) 13 { 14 15 @autoreleasepool { 16 Person *p = [[Person alloc] init]; 17 Agent *a=[[Agent alloc]init]; 18 p.delegate=a; 19 [p buyTicket]; 20 } 21 return 0; 22 }
作者:
mekor
出处:http://www.cnblogs.com/Mekor/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以发邮件
邮箱: hiccer@126.com
微博: mekor 联系我,非常感谢。
出处:http://www.cnblogs.com/Mekor/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以发邮件
邮箱: hiccer@126.com
微博: mekor 联系我,非常感谢。