【非凡程序員】 OC第十四節課 (代理模式 一 醫生與病人)

1.代理模式函數

舉個例子:有一個嬰兒,他自己不會本身吃飯和洗澡等等一些事情,因而嬰兒就請了一個保姆,因而嬰兒和保姆之間商定了一個協議,協議中寫明瞭保姆須要作什麼事情,而保姆就是這個代理人,  即:嬰兒和保姆之間有個協議,保姆繼承該協議,因而保姆就須要實現該協議中的條款成爲代理人。
2.代理模式的關鍵點:atom

   A完成一件事,可是本身不能完成,因而他找個代理人B 替他完成這個事情,他們之間便有個協議(protocol),B繼承該協議來完成A代理給他的事情。 spa

 

3.病人找醫生看病 的案例:代理

 

SickProtocol.h文件code

#import <Foundation/Foundation.h>對象

@protocol sickDelegate <NSObject>
//這個協議方法爲治病,只能醫生有治病這個能力,Sick病人沒有
- (void) cure;繼承

@endit


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

@interface Sick : NSObjectimport

@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"

//代理模式:委託 ,委託其餘的對象實現相關的功能,通常會有協議 protocolint 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;}

相關文章
相關標籤/搜索