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

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

 

posted @ 2014-08-31 00:30  李小争  阅读(220)  评论(0编辑  收藏  举报