这几天楼主等开学,没事干预习了一下就业班的课程。发现代理模式在UI设计中用的非常多,今天特意复习一下。顺便给对这种模式理解的不到位的同学讲解一下具体步骤。。
<1>代理模式什么时候用? 1. A想告诉B一些事情 2. A想让B帮忙做某些事 3. B想监听A
这么说可能有的同学问了,我让A和B成为依赖关系或者组合关系不也行吗? OK,行是行,但是我们iOS设计的原则是低耦合高聚合。当有一天领导说要改项目,我不要这个功能了或者再加个功能。好吧,属性得改,方法得改,哐哐一顿改。 代理模式就省事多啦,我只要定义个协议,拥有一个协议属性,别的类只要遵守了这个协议就能为我做好多事情。是不是这个理儿呢?
<2>命名规范: 1. 协议名: CZ+被代理类名+Delegate
2.协议属性 id <协议名> delegete
3.协议方法: 起一个有意义的名字,最好把被代理对象作为形参
<3>下面我们以小明找中介租房子为例,写个代码演示一下具体步骤
- //被代理类(小明)
- #import <Foundation/Foundation.h>
- @class CZPerson;
- // 第一步:定义代理协议
- @protocol CZPersonDelegate <NSObject>
- // 协议方法
- @optional
- - (void) findPersonHouse:(CZPerson *)person;
- @end
- @interface CZPerson :NSObject
- @property (nonatomic,copy) NSString *name;
- // 第二步:定义协议属性
- @property (nonatomic,weak) id<CZPersonDelegate> delegate;
- // 第三步:定义被代理对象要做的事情
- -(void) zufang;
- @end
-
- @implementation CZPerson
- -(void) zufang
- {
- NSLog(@"%@要租房子",self.name);
- //第四步:给代理发送消息(先判断代理是否响应了协议方法)
- if([self.delegate respondsToSelector:@selector(findPersonHouse:)]){
- [self.delegate findPersonHouse:self];
- }
- }
- @end
复制代码- #import <Foundation/Foundation.h>
- @import "CZPerson"
- //代理类(中介)注意要遵守代理协议
- @interface CZZhongjie :NSObject <CZPersonDelegate>
- @end
- @implementation CZZhongjie
- // 第五步:实现协议方法
- - (void) findPersonHouse:(CZPerson *)person
- {
- NSLog(@"帮%@找到了房子",person.name);
- }
复制代码- // 测试主函数
- #import <Foundation/Foundation.h>
- #import "CZPerson"
- #import "CZZhongjie"
- int main(int argc,const char *argv[]){
复制代码
|
|