//
// 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链接在此
完整版代码由于较长,见压缩文件。