代理设计模式练习

//  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或者delegate
 3.协议中的方法名称一般以协议的名称protocol之前的作为开头
 4.一般情况下协议中的方法会将触发该协议的对象传递出去
 
 5.一般情况下一个类中的代理属于的名称叫做 delegate
 
 6.当某一个类要成为另外一个类的代理的时候, 
   一般情况下在.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

 

posted @ 2017-03-25 10:20  iFat  阅读(217)  评论(0编辑  收藏  举报