[非凡程序员]OC设计模式:代理模式以及协议

协议: 是多个对象之间协商的一个接口对象
协议可以用来声明一大堆方法(不能申明成员变量)
只要类遵守了这个协议,就相当于拥有了这个协议中的所有申明
父类遵循了某个协议,子类也会遵循这个协议。

可以对象遵循协议 类遵循协议 协议遵循协议。

协议的关键字 :@protocol 遵守多个协议的时候用逗号隔开
协议的写法:@protocol 协议名 <基协议(NSObject)>
@required 必须实现方法 (不规定的时候默认也是必须实现)
@optional 可以实现也可以不实现方法
@end 结尾
注意:在写协议时,不是每一个文件只能写一个协议,可以在一个文件写多个协议。新的协议需要写在之前协议的@end之后

是创建了一个 Header File 类型的.h接口文件里写协议 。
谁遵守了协议 谁去实现这个方法。

代理模式:为别人做嫁衣 比如 A无法做到的事情找到B帮他完成,他们之间有个协议,B就需要遵守协议帮A完成
多个对象之间协同解决问题,通常运用在对象之间通信。
特点:使用了代理不需要子类化,简化代码,灵活

设置代理:@property(nonatomic,strong)id<协议的名字>代理的名字;// 这一行的意思:设置代理属性,这个属性为id类型便于其他遵守此协议的对象传入,使代码更灵活
绑定代理:让B为A做事, A.代理的名字=B
[A 要做的事情];

//

//  main.m

//  看病

//

//  Created by 非凡 程序员 on 15/11/5.

//  Copyright (c) 2015 非凡 程序员. All rights reserved.

//

//练习一:

//我想找个住房,因工作很忙便找了一个中介,帮忙找房子

//-我的代理是中介,在我需要找住房时,帮我找房子

//加分要求:

//1.指定所需户型

//

//练习二:

//我想去看电影,没时间跑去电影院,找了团购帮我买电影票

//-我的代理是团购,在我没时间去买票时,方便我买电影票

//加分要求:

//1.指定电影票和观看日期

//2.代理告知我当天电影场次





#import <Foundation/Foundation.h>

#import "Doctor.h"

#import "Sick.h"

#import "Nurse.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        //实例化病人对象

        Sick *xiaoMing=[[Sick alloc]init];

        xiaoMing.name=@"小明";

          //实例化医生对象

        Doctor *aHua=[[Doctor alloc]init];

        aHua.name=@"医生";

        //实例化护士对象

        Nurse *xiaoBai=[[Nurse alloc]init];

        xiaoBai.name=@"护士";


        //设置病人委托对象

        xiaoMing.doctorDeleget=xiaoBai;

//        生病治病

        [xiaoMing ill];

        

        

    }

    return 0;

}


//治病协议---新协议最好遵守基协议

@protocol sickDeleget <NSObject>

//协议的治疗方法,这里没有指定默认是一定实现的

-(void)cure;


@end


#import <Foundation/Foundation.h>

#import "cureSickProtocol.h"

#import "Doctor.h"

@interface Sick : NSObject

@property( nonatomic , strong ) NSString *name;

//设置代理属性,这个属性为id类型便于其他遵守此协议的对象传入,使代码更灵活

@property( nonatomic , strong )id<sickDeleget> doctorDeleget;

//病人方法,生病去看病

-(void)ill;

@end


#import "Sick.h"


@implementation Sick

-(void)ill{

    NSLog(@"%@说,医生我生病了啊。。。",_name);

//    病人通过代理委托医生看病

    [self.doctorDeleget cure];

}

@end


#import <Foundation/Foundation.h>

#import "cureSickProtocol.h"

@interface Doctor : NSObject<sickDeleget>//医生遵守协议


@property ( nonatomic , strong ) NSString * name ;


@end


#import "Doctor.h"


@implementation Doctor

//这个方法是协议中的,协议的方法是谁遵守协议谁实现方法,这里没有接口

-(void)cure{

    NSLog(@"医生开始治病~");

}

@end


#import <Foundation/Foundation.h>

#import "cureSickProtocol.h"

@interface Nurse : NSObject<sickDeleget>

@property(nonatomic,strong)NSString *name;

@end


#import "Nurse.h"


@implementation Nurse

-(void)cure{

    NSLog(@"护士开始治病~");

}

@end


你可能感兴趣的:([非凡程序员]OC设计模式:代理模式以及协议)