您的位置:首页 > 其它

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

2015-08-06 01:13 656 查看
//
//  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链接在此
完整版代码由于较长,见压缩文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: