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

来源:互联网 发布:13家合法网络筹款平台 编辑:程序博客网 时间:2024/06/05 05:29
---------------------- 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 = [_delegateticketPrice];

    int number = [_delegateleftTicketsNumber];

    

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

}


- (void)dealloc

{

    [_delegate release];

    [superdealloc];

}


@end



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

#import <Foundation/Foundation.h>

#import "Person.h"

#import "Agent.h"


int main()

{

   //

    Person *p = [[Personalloc] init];

    // 代理

    Agent *a = [[Agentalloc] init];

    

    //设置人的代理属性

    p.delegate = a;

    

    // 人打算买票

    [pbuyTicket];

    

    

    [arelease];

    [prelease];

        

   return 0;

}



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

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

#import <Foundation/Foundation.h>


@protocol TicketDelegate <NSObject>


- (double) ticketPrice;


- (int) leftTicketsNumber;


@end





---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击