2015.7.30 第五堂(补)delegate 三部曲理解之一(不使用代理)

//
//  Person.m
//  Delegate-租房-不适用代理
//
//  Created by Baocloud-iMac8 on 15/7/30.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import "Person.h"
#import "Agency.h"

@implementation Person

- (void)needOneHouse{
    //找到一个中介 小王
    Agency *xiaoWang = [[Agency alloc] init];
    
    //告诉小王是我让你做的(当程序运行起来之后才能确定我是谁)
    xiaoWang.man = self;
    
    //租房
    [xiaoWang rentHouse:self.name des:@"我要高大上的房子"];
}

 xiaoWang.man = self; 当前类Person赋值给xiaowang的man属性/对象,告诉小王是“我"让你做的

    [xiaoWang rentHouse:self.name des:@"高大上"]; 把当前类的name属性和所需房屋描述作为参数传递给rentHouse函数,好让中介来进行实际的租房操作

至此,needOneHouse发起了租屋的整个事件,并通过rentHouse传参和self达到了往agency那边传递信息的功能。

//
//  Agency.m
//  Delegate-租房-不适用代理
//
//  Created by Baocloud-iMac8 on 15/7/30.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import "Agency.h"

@implementation Agency

- (void)rentHouse:(NSString *)name des:(NSString *)des{
    //模拟租房的过程
    NSLog(@"尊敬的主人:%@ 滴滴一下 马上出发",name);
    NSLog(@"主人,您的房源找到了:%@", des);
    
    //将租到的信息反馈给调用者
    if ([self.man respondsToSelector:@selector(callTelephone:)]) {
        [self.man callTelephone:@"中介说:那是灯壁辉煌的一个房子"];
    }
小王NSLog表示实际租房过程(略),判断当前类self(agency)的man属性(之前已经调过来是person了)是否实现了往回传的callTelephone方法,如果是,用该方法将中介租到的信息(results)反馈给调用者。

Person.m中的callTelephone方法:

- (void)callTelephone:(NSString *)resluts{
    NSLog(@"我接收到你的描述是%@,辛苦了小王这房子我要了", resluts);
}
以及要定义 中介的man属性来接受信息,要定义租房者的name属性来传递信息。代码略。


最后在main函数中,调用needOnehouse这个发起租房的总事件。

        Person *jack = [[Person alloc] init];
        jack.name = @"Jack";
        [jack needOneHouse];

同理完成其他两项,最终结果为:


但三部曲之一存在明显的两个缺点:

1.代码没有扩展性,每添加一个租房者,在中介那需要增添一个对象记录man superman jiwawa;(我觉得声明name也要各个声明很麻烦)

2.作为中介,无法对租房者进行统一管理(不知道对方有什么方式可以接收中介要反馈的信息)。



http://pan.baidu.com/s/1pJKd1Bt链接在此

完整版代码由于较长,见压缩文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值