【非凡程序员】 OC第十四节课 (代理模式 一 医生与病人)

我怕爱的太早我们不能终老 提交于 2019-12-04 16:49:30

1.代理模式

举个例子:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代理人,  即:婴儿和保姆之间有个协议,保姆继承该协议,于是保姆就需要实现该协议中的条款成为代理人。
2.代理模式的关键点:

   A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议(protocol),B继承该协议来完成A代理给他的事情。 

 

3.病人找医生看病 的案例:

 

SickProtocol.h文件

#import <Foundation/Foundation.h>

@protocol sickDelegate <NSObject>
//这个协议方法为治病,只能医生有治病这个能力,Sick病人没有
- (void) cure;

@end


#import <Foundation/Foundation.h>
#import "SickProtocol.h"

@interface Sick : NSObject

@property(nonatomic, assign)NSString *name;
@property(nonatomic, strong)id<sickDelegate> delegate; (重点)
- (void) ill;

@end

Sick.h文件

#import "Sick.h"

@implementation Sick

- (void) ill
{
    NSLog( @"医生我生病了...");
    //因为我说出了自己的病情 医生开始给我治病 _delegate 医生(重点)

    [_delegate cure];
}

-(void) dealloc{
    NSLog( @"Sick dealloc %@", _name );
}

@end

Sick.m文件

#import "Sick.h"

@implementation Sick

- (void) ill
{
    NSLog( @"医生我生病了...");
    //因为我说出了自己的病情 医生开始给我治病 _delegate 医生
    [_delegate cure];
}

@end

Doctor.h文件

#import <Foundation/Foundation.h>
#import "SickProtocol.h"

@interface Doctor : NSObject <sickDelegate>

@property(nonatomic, assign) NSString *name;


@end

Doctor.m文件

#import "Doctor.h"

@implementation Doctor


- (void) cure
{
    NSLog( @"%@医生 :开始治病..", _name);
}
@end

main函数文件
#import <Foundation/Foundation.h>
#import "Doctor.h"
#import "Sick.h"

//代理模式:委托 ,委托其他的对象实现相关的功能,一般会有协议 protocol
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        //现在我生病了
        Sick *sick = [[Sick alloc]init];
        sick.name = @"Mr.Du";
        //医院给我推荐了一个医生
        Doctor *doctor = [[Doctor alloc]init];
        doctor.name = @"Rose";
       
        //我找到了医生
        sick.delegate = doctor;
        //说出了自己的病情
        [sick ill];
       
    }
    return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!