黑马程序员---OC学习笔记之利用协议实现代理模式

------Java培训、Android培训、iOS培训、.Net培训--------

1、利用协议实现代理模式的主要思路是:

1)定义一个协议,里面声明代理类需要实现的方法列表。

2)创建一个代理类,遵守上面的代理协议

3)在需要代理类的类Baby中,定义一个对象,【类型为id ,且遵守代理协议】的成员变量delegate

4)在Baby类中调用成员变量delaget(代理)的方法,调用代理类的方法

5)main.m或其他使用Baby类的文件中,为Baby类的成员变量(代理类)赋值。

【用父类还是id<协议>

不使用父类的原因:

1)如果抽象一个父类的话,还是有局限性,因为很多时候,不同类是无法抽象出共同的父类的。

2)有时候,某个类已经继承了其他类,这里不能再继承类了。

2、实现举例:

【要求】学生需要找房源,中介可以提供房源,

【学生类】Student

行为:需要住房

【中介类】InnerHome和YeDian

行为:找房

【协议类】findHouseProtocol

协议:找房

 

【协议类findHouseProtocol.h文件】

#import <Foundation/Foundation.h>
//找房子协议
@protocol findHouseProtocol <NSObject>
//协议内容:找房子
-(void)findHouse;
@end


【学生类Student.h文件】

#import <Foundation/Foundation.h>
#import "findHouseProtocol.h"
 
@interface Student : NSObject
-(void)needHouse;
//定义一个对象,【类型为id ,且遵守代理协议】的成员变量delegate
@property(nonatomic,strong) id<findHouseProtocol>delegate;
@end
 


【Studen.m文件】

#import "Student.h"
 
@implementation Student
 
-(void)needHouse{
    NSLog(@"学生需要一个温暖的屋子...");
    [self.delegate findHouse];
}
@end


【InnerHome.h文件】

#import <Foundation/Foundation.h>
#import "findHouseProtocol.h"
//如家宾馆:遵守找房协议
@interface InnerHome : NSObject<findHouseProtocol>
 
@end


【InnerHome.m文件】

#import "InnerHome.h"
 
@implementation InnerHome
 
//实现找房协议中的方法
-(void)findHouse{
    NSLog(@"如家帮您找房....");
}
@end


【YeDian.h文件】

#import <Foundation/Foundation.h>
#import "findHouseProtocol.h"
//夜店宾馆:遵守找房协议
@interface YeDian : NSObject<findHouseProtocol>
 
@end


 

【YeDian.m文件】

#import "YeDian.h"
 
@implementation YeDian
//实现找房协议中的方法
-(void)findHouse{
    NSLog(@"夜店为您提供全方面服务,叶良辰为您宝航护驾....");
}
@end


【main.m文件】

#import <Foundation/Foundation.h>
#import "Student.h"
#import "InnerHome.h"
#import "YeDian.h"
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
        //定义一个黑中介
        InnerHome *ih = [InnerHome new];
        YeDian *yd = [YeDian new];
         //定义一个学生类对象
        Student *stu = [Student new];
       
        stu.delegate = ih;
        [stu needHouse];
       
        stu.delegate = yd;
        [stu needHouse];
       
   }
    return 0;
}


 

【打印结果】

2015-10-07 19:53:55.080 找房子[2056:303] 学生需要一个温暖的屋子...

2015-10-07 19:53:55.082 找房子[2056:303] 如家帮您找房....

2015-10-07 19:53:55.083 找房子[2056:303] 学生需要一个温暖的屋子...

2015-10-07 19:53:55.083 找房子[2056:303] 夜店为您提供全方面服务,叶良辰为您宝航护驾....

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值