一·什麼事代理模式?設計模式
代理模式是在oc中常常遇到的一種設計模式,那什麼叫作代理模式呢? 舉個例子:有一租客, 他要租房子,但是他不知道哪兒有房子可租,因而他就找了中介,讓中介去幫他找房子,因而他和中介之間商定了一個協議,協議中寫明瞭中介須要作的事情是幫他找房子, 而中介就成爲了租客的代理人, 即:他和中介之間有個協議,中介繼承該協議,因而中介就須要實現該協議中的條款成爲代理人。atom
1 #import <Foundation/Foundation.h> 2 3 @protocol StudentProtocol <NSObject> 4 /* 5 協議要作的事兒 6 幫學生找房子 7 */ 8 -(void)studentFindHourse; 9 @end
2,再次聲明Intermediary(中介)類,即代理的人:spa
在Intermediary.h文件中設計
#import <Foundation/Foundation.h> #import "StudentProtocol.h" @interface Intermediary : NSObject<StudentProtocol>//實現該協議 @end
3.中介要乾的事兒,實現文件,在Intermediary.m文件中代理
#import "Intermediary.h" @implementation Intermediary -(void)studentFindHourse { NSLog(@"%s 幫學生找房子",__func__); //__func__輸出中介的名稱 } @end
4.在聲明一個Student類code
在Student.h文件中blog
#import <Foundation/Foundation.h> #import "StudentProtocol.h" @interface Student : NSObject -(void)findHourse;//找房子的方法 @property(assign,nonatomic)id <StudentProtocol> delegate; @end
5.在在Student.m文件中繼承
#import "Student.h" @implementation Student -(void)findHourse { NSLog(@"學生要找房子"); //通知代理幫他找房子
if([self.delegate respondsToSelector:@selector(studentFindHourse)]) { [self.delegate studentFindHourse]; } } @end
6.在main文件中it
#import <Foundation/Foundation.h> #import "Student.h" #import "Intermediary.h" #import "Intermediary1.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu=[Student new]; Intermediary *inter=[Intermediary new]; stu.delegate=inter; [stu findHourse]; } return 0; }
7.運行結果io
2016-03-01 21:26:41.375 代理模式[2672:236249] 學生要找房子 2016-03-01 21:26:41.377 代理模式[2672:236249] -[Intermediary studentFindHourse] 幫學生找房子 Program ended with exit code: 0
代理中,須要記住的關鍵是在發出代理請求的類(A)中聲明代理人(B)的實例變量,這樣就能夠保證A 能經過調用B中B代理的方法來完成B代理的事情,即本身代理給B 的事情。