黑马程序员—IOS加强视频—利用协议实现代理模式

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------
定义: 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象
而代理对象可以在客户端和目标对象之间起到中介的作用。

使用代理模式可以降低耦合度。大大的增强了代码的弹性。

例:小明想看电影,但是没时间买票于是就拜托小强去买票
利用 协议,我们可以把协议当做一个 “用户”与 “代理”之间的中转站
以下是这个例子的协议

1.  @protocol TicketDelegate<NSObject>  

2.  //票价  

3.  - (double) ticketPrice;  

4.  //剩了多少张票  

5.  - (int) leftTicketNumber;  

6.  @end  

复制代码

让代理类遵守协议 并且实现应该实现的方法

1.  @interface Agent : NSObject<TicketDelegate>  

2.    

3.  @end  

复制代码

这样有了 一个可以代理协议 跟一个代理,还可以通过协议实现更多的代理 

1.  @implementation Person  

2.    

3.  //想看电影  

4.  - (void) buyTicket  

5.  {  

6.      //让代理帮忙买票(询问票价剩余张数)  

7.      double price =[_delegate ticketPrice];  

8.      int number = [_delegateleftTicketNumber];  

9.      NSLog(@"通过代理知:票价= %f,剩余票数= %d",price, number);  

10. }  

11.   

12. @endl  

复制代码

在person类中 _delegate这个变量代表着 所使用的代理
在上面已经说了要使用id类型 但id类型必须要遵守协议
才能使_delegate 能够使用协议中的方法
这样就解决了上面所说的无法识别(代理中的方法)的问题

1.  @interface Person :NSObject  

2.   

3.  - (void) buyTicket;  

4.  @property (nonatomic,retain)id<TicketDelegate> delegate;   // 必须遵守协议  

5.    

6.  @end

复制代码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值