代理设计模式练习
// main.m
// 代理設計模式練習#import <Foundation/Foundation.h>
#import "Person.h"
#import "LinkHome.h"
#import "LoveHome.h"int main(int argc, const char * argv[]) {/*用代理實現學生找房子, 不具備找房子的能力所以學生可以找另一個對象來幫它找房子, 那么另一個對象就是學生的代理*/Person *p = [Person new];LinkHome *lh = [LinkHome new];p.delegate = lh;// LoveHome *lh = [LoveHome new];
// p.delegete = lh;
[p findHourse];return 0;
} // Person.h
// day17#import <Foundation/Foundation.h>
//#import "StudentProtocol.h"/*協議的編寫規范:1.一般情況下, 當前協議屬于誰, 我們就將協議定義到誰的頭文件中2.協議的名稱一般以它屬于的那個類的類名開頭, 后面跟上protocol或者delegate3.協議中的方法名稱一般以協議的名稱protocol之前的作為開頭4.一般情況下協議中的方法會將觸發該協議的對象傳遞出去5.一般情況下一個類中的代理屬于的名稱叫做 delegate6.當某一個類要成為另外一個類的代理的時候, 一般情況下在.h中用@protocol 協議名稱;告訴當前類 這是一個協議.在.m中用#import真正的導入一個協議的聲明*/@class Person;@protocol PersonProtocol <NSObject>- (void)personFindHourse:(Person *)person;@end@interface Person : NSObject//@property (nonatomic, strong) id<StudentProtocol> delegete;
@property (nonatomic, strong) id<PersonProtocol> delegate;- (void)findHourse;
@end // Person.m#import "Person.h"@implementation Person- (void)findHourse
{NSLog(@"學生想找房子");// 通知代理幫他找房子if ([self.delegate respondsToSelector:@selector(personFindHourse:)]) {[self.delegate personFindHourse:self];}
}@end // StudentProtocol.h#import <Foundation/Foundation.h>@protocol StudentProtocol <NSObject>// 幫學生找房子
- (void)studentFindHourse;
@end // LinkHome.h#import <Foundation/Foundation.h>
//#import "Person.h"@protocol PersonProtocol;@interface LinkHome : NSObject <PersonProtocol>@end // LinkHome.m#import "LinkHome.h"
#import "Person.h"@implementation LinkHome- (void)personFindHourse:(Person *)person
{NSLog(@"%s", __func__);
}
@end // LoveHome.h#import <Foundation/Foundation.h>@interface LoveHome : NSObject@end // LoveHome.m#import "LoveHome.h"@implementation LoveHome@end
?
轉載于:https://www.cnblogs.com/xufengyuan/p/6616125.html
總結
- 上一篇: 程序员搜索技巧
- 下一篇: windows下部署免费ssl证书(le