黑马程序员技术交流社区

标题: 关于人买票 代理模式的思路与实现 [打印本页]

作者: Jack-xie    时间: 2014-10-9 16:06
标题: 关于人买票 代理模式的思路与实现
协议的应用--代理模式
思路:有个人想看电影,需要去买票,但是人没有时间,所以需要一个代理去执行询问票价及剩余的票数
用代码实现:
1.创建一个人的类,方法:买票
2.创建一份协议,在协议中声明两个方法  询问票价和剩余的票数
3.创建两个代理的类,让代理类遵守协议  然后在代理类.m 文件中实现协议中声明的方法
4.回到人的.h 文件中声明一个代理的属性 重点id类型 遵守协议
5.在人的.m 文件中让代理的属性调用方法实现买票的功能
6.在主函数中,创建三个对象,调用方法实现买票

// 1.创建一个人的类,方法:买票
#import <Foundation/Foundation.h>
#import "TicketProtocol.h"

@interface Person : NSObject
// 买票的方法
-(void)buyTicket;

// 4.回到人的.h 文件中声明一个代理的属性 重点id类型 遵守协议
// 创建一个代理的属性  在实现方法中让delegate这个属性去调用方法实现买票  但实现人代理的对象必须要遵守<TicketProtocol>协议
@property (nonatomic,strong) id<TicketProtocol> delegate;

@end
// 2.创建一份协议,在协议中声明两个方法  询问票价和剩余的票数
#import <Foundation/Foundation.h>
@protocol TicketProtocol <NSObject>
// 协议 声明两个方法
-(int)TicketPrice;// 票价
-(int)remainingTicket;// 剩余票数
@end
// 3.创建两个代理的类,让代理类遵守协议  然后在代理类.m 文件中实现协议中声明的方法
// 第一个代理的类
#import <Foundation/Foundation.h>
#import "TicketProtocol.h"
@interface Agent : NSObject<TicketProtocol>// Agent类遵守<TicketProtocol>协议
@end

#import "Agent.h"
@implementation Agent
// 实现协议中声明的两个方法
-(int)TicketPrice{
    return 100;
}
-(int)remainingTicket{
    return 5;
}
@end
// 第二个代理的类
#import <Foundation/Foundation.h>
#import "TicketProtocol.h"
@interface OtherAgent : NSObject <TicketProtocol>// OtherAgent类遵守<TicketProtocol>协议
@end

#import "OtherAgent.h"
@implementation OtherAgent
// 实现协议中声明的两个方法
-(int)TicketPrice{
    return 80;
}
-(int)remainingTicket{
    return 50;
}
@end
// 5.在人的.m 文件中让代理的属性调用方法实现买票的功能
#import "Person.h"
@implementation Person
// 实现买票
-(void)buyTicket{
    int price = [_delegate TicketPrice];
    int remaining = [_delegate remainingTicket];
    NSLog(@"票价:%i,剩余票数:%i",price,remaining);
}
@end
// 6.在主函数中,创建三个对象,调用方法实现买票
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 创建三个对象  一个人对象  两个代理对象
        Person *person1 = [[[Person alloc] init] autorelease];
        Agent *agent1 = [[[Agent alloc] init] autorelease];
        OtherAgent *otherAgent1 = [[OtherAgent alloc] init];
        // 将agent1 赋值个人的属性delegate
        person1.delegate = agent1;
        [person1 buyTicket];// 实现人买票 代理agent1去执行
        // 将otherAgent1 赋值个人的属性delegate
        person1.delegate = otherAgent1;
        [person1 buyTicket];// 实现人买票 代理otherAgent1去执行
        // 释放对象
        [otherAgent1 release];
    }
    return 0;
}
作者: 米匠    时间: 2014-10-9 16:50
绝对的好东西,必须赞




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2