黑马程序员技术交流社区
标题:
详解代理模式--就业班最常用的模式
[打印本页]
作者:
长厢厮守℡
时间:
2015-12-31 23:43
标题:
详解代理模式--就业班最常用的模式
这几天楼主等开学,没事干预习了一下就业班的课程。发现代理模式在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[]){
复制代码
作者:
长厢厮守℡
时间:
2015-12-31 23:44
// 测试主函数
#import <Foundation/Foundation.h>
#import "CZPerson"
#import "CZZhongjie"
int main(int argc,const char *argv[]){
CZPerson * person = [[CZPerson alloc] init];
CZZhongjie * zj = [[CZZhongjie alloc] init];
person.name = @"小明";
//第六步:为代理属性赋值
person.delegate = zj;
// 第七步:调用方法
[person zufang];
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2