标签:
一.代理设计模式的基本概念:
代理是指一个对象提供机会会对另一个对象中行为发生变化时做出的反应。总而言之,代理设计默认的基本思想----两个对象协同解决问题,通常运用于对象间通信。
二.代理设计模式的基本特点:
2.1简化了对象的行为,最大化减小对象之间的耦合度
2.2使用代理,一般来说无需子类化
2.3简化了我们应用程序的开发,既容易实现,而且灵活
三.代理的使用例子:
假设一个CZPerson想要通过代理找公寓。
定义一个CZPerson的类,.h文件如下
1 #import <Foundation/Foundation.h> 2 @protocol FindApartment <NSObject> 3 - (void) findApartment; 4 @end 5 @interface CZPerson : NSObject 6 @property (nonatomic,copy) NSString *name; 7 @property (nonatomic,weak) id <FindApartment> delegate; 8 - (void)wanneFindApartment; 9 10 11 @end
内部有一个协议<FindApartment>,协议内部有一个方法 - (void) findApartment;
且有一个delegate的id类型的属性;
CZPerson的.m文件内部如下:
3 @implementation CZPerson 4 5 6 7 - (void)wanneFindApartment 8 { 9 if ([self.delegate respondsToSelector:@selector(findApartment)]) { 10 [self.delegate findApartment]; 11 } 12 } 13 @end
他有一个可以自己调用的方法wanneFindApartment,实现是像代理发送找房子这个信息
代理CZDetegate的.h文件如下
1 #import <Foundation/Foundation.h> 2 #import "CZPerson.h" 3 @interface CZDelegate : NSObject<FindApartment> 4 5 @end
可见首先在接口中声明他遵守了<FindApartment>这个协议
.m文件如下
#import "CZDelegate.h" @implementation CZDelegate - (void)findApartment { NSLog(@"找找找"); } @end
实现了协议中的findApartment这个方法,即打印“找找找"
在main函数中如下:
#import <Foundation/Foundation.h> #import "CZPerson.h" #import "CZDelegate.h" int main(int argc, const char * argv[]) { @autoreleasepool { CZPerson *person = [[CZPerson alloc]init]; CZDelegate *delegate = [[CZDelegate alloc]init]; person.delegate = delegate; [person wanneFindApartment]; } return 0; }
设置person的代理,并且让person执行wanneFindApartment这个方法,结果如下;
标签:
原文地址:http://www.cnblogs.com/BJTUzhengli/p/5086947.html