OC语言day07-05代理设计模式练习及规范

pragma mark 代理设计模式练习及规范

pragma mark 概念

/**
 协议的编写规范:
 1. 一般情况下, 当前协议属于谁, 我们就将协议 定义都谁的头文件中
 2. 协议的名称 一般以它属于的那个类 的类名开头,后面跟上Protocol或者Delegate
 3. 协议中的方法名称 一般以协议的名称(方法) protocol之前的作为开头, 后面跟上该方法的用途的名称
 4. 一般情况下 协议中的方法 会将触发 该协议的对象传递出去
 5. 一般情况下 一个类中的代理属性的名称 叫做 delegate
 6. 当某一个类 成为另外一个类的代理的时候, 
    一般情况下在.h中 用 @protocol 协议名称; 告诉当前类 这是一个协议
    在.m中 用 #impert 真正的导入一个协议的声明

 */

pragma mark 代码

#import 
#pragma mark 类
#import "Student.h"
#import "LinkHome.h"
#import "LoveHome.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
#warning 用代理实现 学生找房子, 学生不具备找房子的能力
    /**
     所以学生可以找另一个对象来帮它找房子, 那么另一个对象就是学生的代理
     */
    
    Student *stu = [Student new];
    
    LinkHome *lh = [LinkHome new];
    stu.delegate = lh; // 帮学生找房子的 是链家 这个代理

//    LoveHome *lh = [LoveHome new];
//    stu.delegate = lh; // 帮学生找房子的 是我爱我家 这个代理

    [stu findHourse];
    
    
    return 0;
}

协议

StudentProtocol.h
// 帮学生找房子
- (void)studentFindHourse;

Student.h //学生类
#import 
//#import "StudentProtocol.h"

/**
 协议的编写规范:
 1. 一般情况下, 当前协议属于谁, 我们就将协议 定义都谁的头文件中
 2. 协议的名称 一般以它属于的那个类 的类名开头,后面跟上Protocol或者Delegate
 3. 协议中的方法名称 一般以协议的名称(方法) protocol之前的作为开头, 后面跟上该方法的用途的名称
 4. 一般情况下 协议中的方法 会将触发 该协议的对象传递出去
 5. 一般情况下 一个类中的代理属性的名称 叫做 delegate
 6. 当某一个类 成为另外一个类的代理的时候, 
    一般情况下在.h中 用 @protocol 协议名称; 告诉当前类 这是一个协议
    在.m中 用 #impert 真正的导入一个协议的声明

 */
@class Student;
@protocol StudentProtocol 

// 帮学生找房子
- (void)studentFindHourse:(Student *)stu;

@end

@interface Student : NSObject
- (void)findHourse;

//@property(nonatomic, strong)id delegate;

@property(nonatomic, strong)id delegate;

@end
Student.m
#import "Student.h"

@implementation Student

- (void)findHourse
{
    NSLog(@"学生想找房子");
    
//    // 通知代理 帮他找房子
    if ([self.delegate respondsToSelector:@selector(studentFindHourse:)]) {
//        [self.delegate studentFindHourse];
        [self.delegate studentFindHourse:self];
    }
}
@end

LinkHome.h //链家类
#import 
//#import "Student.h"

// 一般不需要导入头文件 直接protocol 协议的名称
// 类似  @class一样
// 告诉 当前类 StudentProtocol 是一个协议
@protocol StudentProtocol;

@interface LinkHome : NSObject 

@end
LinkHome.m
#import "LinkHome.h"
#import "Student.h"

@implementation LinkHome

- (void)studentFindHourse:(Student *)stu
{
    NSLog(@"%s",__func__);
}
@end

LoveHome.h //我爱我家类
#import 
//#import "Student.h"
@protocol StudentProtocol;
@interface LoveHome : NSObject

@end

LoveHome.m
#import "LoveHome.h"
#import "Student.h"
@implementation LoveHome

- (void)studentFindHourse:(Student *)stu
{
    NSLog(@"%s",__func__);
}

@end

你可能感兴趣的:(OC语言day07-05代理设计模式练习及规范)