首页 > 代码库 > 简单的协议应用-代理模式

简单的协议应用-代理模式

协议(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 }

 

简单的协议应用-代理模式