OC 第九天

老牛浏览 397评论 0发表于

代理

objectivec
//
//  main.m
//  代理讲解
//
#import <Foundation/Foundation.h>
/**
 查看帮助总结:
 1.快速查看
 2.查看文档  路径:点击help-选中第一项  在搜索框填入要搜索的内容,下面就会显示这个知识点的相关内容,可进行查看
 */
/**
 设计模式:简单的说就是设计模板。前人预先已经设计好的程序代码(模板),我们只要按照它的要求方式进行编码,就可以实现相应的功能。
 作用:提供了一种模板,功能实现起来更加的简单。

 分类:单例,
      代理/委托,
      工厂,
      kvc(key-value coding(键值编码)),
      观察者(kvo(key-value observing(键值观察),通知),
      MVC(model-view-controller(模型-视图-控制器)

 代理:也叫委托
 定义:A类有一件事情要做,但是自己不想做,让B类帮忙实现。(注意:B类不是固定的某个类,只要能帮我做这件事件的类都可以)

 实例:找房子

 因素:我们 (Student)(A类)
      帮我们找房子的人(代理/中介/第三人) (B类)

 */
#import "Student.h"
#import "Agency.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //学生的对象
        Student *student = [[Student alloc]init];

       // [student findHouse];

        Agency *myAgency = [[Agency alloc] init];

        student.agency = myAgency;
        //找代理帮忙
        [student findHelp];
    }
    return 0;
}

//
//  main.m
//  找房子改进三
//
#import <Foundation/Foundation.h>
#import "Agency.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Agency *myAgency = [[Agency alloc] init];
        //代理去工作
        [myAgency agencyWork];
    }
    return 0;
}

//
//  Student.h
//  代理讲解
//

/**
代理:分成主动类(A类),被动类(B类)
 一般将协议创建到主动类里面。因为协议里面的功能是主动类所提出,并需要的。
 */

#import <Foundation/Foundation.h>
@class Agency;
//#import "BaseProtocol.h"

//我要找的人必须有的能力,相当于一个统一的标准。
@protocol BaseProtocol <NSObject>
-(void)findHouse;
@end

@interface Student : NSObject{
    //Agency *_agency;//代理对象指针
    //遵守了BaseProtocol这个协议的任意对象
    //id<BaseProtocol> _delegate;//代表任意类型的对象,但是他要有找房子的能力
}

//-(void)setAgency:(Agency *)agency;
//-(Agency *)agency;
//-(void)setDelegate:(id<BaseProtocol>)delegate;
//-(id<BaseProtocol>)delegate;
@property id<BaseProtocol>delegate;

////自己找房子
//-(void)findHouse;

//不想自己找了,找中介帮忙找
-(void)findHelp;
@end

//
//  Student.m
//  代理讲解
//

#import "Student.h"
#import "Agency.h"

@implementation Student

//-(void)setAgency:(Agency *)agency{
//    _agency = agency;
//}
//-(Agency *)agency{
//    return _agency;
//}

//-(void)setDelegate:(id<BaseProtocol>)delegate{
//    _delegate = delegate;
//}
//
//-(id<BaseProtocol>)delegate{
//    return _delegate;
//}
//-(void)findHouse{
//    NSLog(@"自己找房子");
//}

-(void)findHelp{
    //以后,如果给成员变量写了setter(set),getter(get)方法,就尽量使用。语法
    //容错处理
    if ([self.delegate respondsToSelector:@selector(findHouse)]) {
        //任意对象找房子
        [self.delegate performSelector:@selector(findHouse)];
    }else{
        NSLog(@"它不能给我找房子");
    }
}
@end

//
//  Agency.h
//  代理讲解
//
#import <Foundation/Foundation.h>

#import "Student.h"
@interface Agency : NSObject<BaseProtocol>{
    //Student *_student;//创建一个学生类的对象指针
}
//-(void)setStudent:(Student *)student;
//-(Student *)student;

@property Student *student;
//代理类的工作
-(void)agencyWork;
@end

//
//  Agency.m
//  代理讲解
//

#import "Agency.h"

@implementation Agency

//-(void)setStudent:(Student *)student{
//    _student = student;
//}
//-(Student *)student{
//    return _student;
//}

-(void)agencyWork{
    //创建学生类对象
    self.student = [[Student alloc]init];
    //通过self将代理类设置成student的delegate对象   *************
    self.student.delegate = self;
    //学生找帮助
    [self.student findHelp];

}
//标记,容易找到对应的代码
#pragma mark - 委托方法
-(void)findHouse{
    NSLog(@"代理帮忙找房子");
}
@end
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于