OC语言之学习篇——03——代理模式

----------------------  ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------


生活中,到处可见 —— 代理。有广义的,也有狭义的。比如,你想买电影票,但是自己又没时间,打个电话,让自己好朋友帮自己去买。这也是一种代理模式。
在编程中,也有代理。它的原理,和现实生活中的代理一样:有些麻烦的事情不想自己亲自去做,就可以找个人帮忙做,即交给代理对象去做。  

要想代理帮我们做事情,首先我们得拥有某个代理的对象属性,其次要清楚代理到底有哪些方法,最后还要保证能解耦。


有个代理Agent,它有2种属性:返回票价、剩余票数。

#import <Foundation/Foundation.h>


@interface Agent : NSObject

// 返回票价

- (double) ticketPrice;


// 还剩多少张票

- (int) leftTicketsNumber;

@end


#import "Agent.h"


@implementation Agent

// 剩余的票数

- (int)leftTicketsNumber

{

    return 10;

}


// 一张票多少钱

- (double)ticketPrice

{

    return 500;

}


我们想用这个代理该如何操作呢?现实生活中只需要一个电话就可以了。而这里我们要用这个代理就必须先要拥有这个代理的方法。

#import <Foundation/Foundation.h>


#import "Agent.h"

@interface Person : NSObject


- (void) buyTicket;


// 拥有一个代理属性

@property (nonatomic, retain) Agent *delegate;


@end


#import "Person.h"


@implementation Person


// 买电影票

- (void)buyTicket

{

    // 叫代理去帮自己买票(询问票价、询问票的剩余张数)

    double price = [_delegate ticketPrice];

    int number = [_delegate leftTicketsNumber];

    

    NSLog(@"通过代理的帮忙,票价=%.1f, 还剩%d张票", price, number);

}


- (void)dealloc

{

    [_delegate release];

    [super dealloc];

}


@end



通过这个代理我们就可以买票了。我们不需要自己亲自去做找个人就可以了。

#import <Foundation/Foundation.h>

#import "Person.h"

#import "Agent.h"


int main()

{

    //

    Person *p = [[Person alloc] init];

    // 代理

    Agent *a = [[Agent alloc] init];

    

    // 设置人的代理属性

    p.delegate = a;

    

    // 人打算买票

    [p buyTicket];

    

    

    [a release];

    [p release];

        

    return 0;

}



突然某一天,如果我想换代理了怎么办?

只要将这个代理的方法放到一个协议中去,只要你遵守这个协议,你就可以做我代理。

#import <Foundation/Foundation.h>


@protocol TicketDelegate <NSObject>


- (double) ticketPrice;


- (int) leftTicketsNumber;


@end





---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值