黑马程序员_代理模式案例



  ------- IOS培训、<a href="http://www.itheima.com" target="blank”>Mac、期待与您交流! —————


1.       设计原理

Ø   有些麻烦的事情不想自己亲自做,就可以找个人帮忙做,即交给代理对象去做

 

2.       设计原则

Ø   首先得拥有某个代理对象属性

Ø   其次要很清楚代理有哪些方法

Ø   最后要保证能解耦

 

3.       实现方案

Ø   定义一个protocol,在其中声明一些和代理沟通的方法

Ø   拥有一个代理属性id<protocol>delegate

Ø   让代理遵守protocol


    声明代理协议

   --TicketDelegate.h--

// 声明一些跑腿方法

@protocol TicketDelegate <NSObject>

// 返回票价

- (double) ticketPrice;

// 还剩多少张票

- (int) leftTicketsNumber;

@end


--Person.h--

#import <Foundation/Foundation.h>

#import "TicketDelegate.h"

@interface Person : NSObject

- (void) buyTicket;

// 拥有一个代理属性

// id代表代理的类名随便

// 但必须遵守TicketDelegate协议

@property (nonatomicretainid<TicketDelegate> delegate;

@end


--Person.m--

#import "Person.h"

@implementation Person

// 买电影票

- (void)buyTicket

{

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

    double price = [_delegate ticketPrice];

    int number =  [_delegate leftTicketsNumber];

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

}

- (void)dealloc

{

    [_delegate release];

    [super dealloc];

}

@end


--Agent.h--

#import <Foundation/Foundation.h>

#import "TicketDelegate.h"

@interface Agent : NSObject <TicketDelegate>

@end


--Agent.h--

#import "Agent.h"


@implementation Agent

// 剩余的票数

- (int)leftTicketsNumber

{

    // ... 亲自跑电影院\或者打电话

    return 1;

}

// 每一张票多少钱

- (double)ticketPrice

{

    // ... 亲自跑电影院\或者打电话

    return 1000;

}

@end


--Main.m--

#import <Foundation/Foundation.h>

#import "Person.h"

#import "Agent.h"

#import "NextAgent.h"


int main(int argc, const char * argv[])

{

    @autoreleasepool {

        Person *p = [[[Person allocinitautorelease];

        

        Agent *a = [[[Agent allocinitautorelease];

        

        p.delegate = a;

        

        [p buyTicket];

    }

    return 0;

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值