黑马程序员-----Category,protocol和block(三)

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

代理模式

1、原理:有些麻烦的不想自己亲自去做的事情,可以找个人帮忙,也就是交给代理对象去做。而且只要能够解决需求,任何人都可以。
2、思路:
首先,我们当前对象得拥有代理对象属性。只有拥有了代理属性,才可能让代理去给我们做事情。
其次,我们清楚的知道我们的代理拥有哪些方法。只有我们的代理拥有能够解决我们需求的方法,我们才会选择该代理去为我们服务,这是我们对代理的唯一要求。
最后,能保证解耦。那么我们拥有的代理属性就应该是id类型的,代表任何对象,因为我们对代理的唯一要求就是代理拥有能够解决我们需求的方法,也就是说能够解决我们需求的任何对象都可以充当我们对象的代理。
3、实现方案
1>定义一个protocol,在其中声明一些和代理沟通的方法
2>拥有一个代理属性id delegate并让代理属性遵守protocol协议id<protocol> delegate
3>定义一个类来实现protocol中的方法。因为protocol当中只是方法的声明,相当于只有程序接口,而没有具体实现,我们要用到其中的方法就必须将protocol中的方法实现。
让我们定义的类遵守protocol协议,实现我们需要protocol的方法(没有必要完全实现)。因为我们要实现protocol当中的方法,就必须拥有protocol的方法,而也只要我们遵守了protocol,就会拥有其中的所有方法。


4、举例说明
模拟按钮Button的点击事件
1>实现Button监听器,其实就是代理
①定义protocol
//Button.h
@protocol ButtonDelegate <NSObjcet>


- (void)onClick:(Button *)btn;


@end


②定义一个Button的监听器delegate,这里类不需要遵守ButtonDelegate
@protocol ButtonDelegate;
@interface Button : NSObject


@property (nonatomic,retain) id<ButtonDelegate> delegate;


- (void)click;


@end


//Button.m
@impelementation Button
- (void)click
  {
//如果按钮被点击,而且_delegate实现了onClick:方法
if([_delegate respondsToSelector:@selector(onClick:)])

  [_delegate onClick:self];
}
  }
@end
2>Button点击事件模拟
①Button监听器实现,这里的类需要遵守ButtonDelegate
//ButtonListener.h
@protoccol ButtonDelegate;
@interface ButtonListener : NSObject <ButtonDelegate>


@end


//ButtonListener.m
#import <Button.h>
@implementation ButtonListener 
- (void)onClick:(Button *)btn
  {
  NSlog(@"按钮%@被点击了",btn);
  }
@end


//模拟Button被点击
//main.m
1>初始化一个按钮
Button *button = [[Button alloc] init];
2>初始化一个按钮监听器
ButtonListener *listener = [[ButtonListener alloc]  init];
3>设置按钮监听器
Button.delegate = listener;
4>点击按钮
[button click];
5>可以总结成四步
①protocol定义
②代理定义
③代理实现

④功能实现

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值