一,不使用delegate
//
// main.m
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *pxd = [[Person alloc] init];
[pxd needOneHouse];
Cat *jfm = [[Cat alloc] init];
[jfm needOneHouse];
}
return 0;
}
//
// Agent.h
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"
@interface Agent : NSObject
//用一个变量来记录让我租房的那个人
@property (nonatomic, strong) Person *customer;
//用一个变量记录猫这个对象
@property (nonatomic, strong) Cat *catCustomer;
//找房源
- (void)rentHouse:(NSString *)str;
@end
//
// Agent.m
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import "Agent.h"
@implementation Agent
- (void)rentHouse:(NSString *)str{
NSLog(@"开始找房源");
NSLog(@"........");
NSLog(@"找到一个相关房源");
//告诉客户 调用客户里面的某个方法 传递参数过去
if (self.customer) {
[self.customer sendResult:@"贵阳花溪财大"];
}
if (self.catCustomer) {
[self.catCustomer sendResults];
}
}
@end
//
// Person.h
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)needOneHouse;
//定义一个方法 用来接收中介返回过来的结果
- (void)sendResult:(NSString *)des;
@end
//
// Person.m
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import "Person.h"
#import "Agent.h"
@interface Person ()
@property (nonatomic, strong) Agent *xiaowang;
@end
@implementation Person
- (void)needOneHouse{
//找到一个中介 实例化一个对象
self.xiaowang = [[Agent alloc] init];
//告诉你是我让你去租房的
_xiaowang.customer = self;
//让这个中介去做事 找房子
[_xiaowang rentHouse:@"价格不是问题 就是要高大上"];
}
- (void)sendResult:(NSString *)des{
NSLog(@"这个房子不错 ,哥要了");
}
@end
//
// Cat.h
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Cat : NSObject
- (void)needOneHouse;
- (void)sendResults;
@end
//
// Cat.m
// 代理2
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import "Cat.h"
#import "Agent.h"
@implementation Cat
- (void)needOneHouse{
Agent *xiaowang = [[Agent alloc] init];
xiaowang.catCustomer = self;
[xiaowang rentHouse:@"舒适安逸 小巧玲珑"];
}
- (void)sendResults{
NSLog(@"加菲猫的邻居?我喜欢");
}
@end
二,使用delegate,会简化程序
//
// main.m
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *pxd = [[Person alloc] init];
[pxd needOneHouse];
Cat *jfm = [[Cat alloc] init];
[jfm needOneHouse];
}
return 0;
}
//
// Agent.h
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
//定义一个协议 代理
@protocol RentHouseDelegate <NSObject>
@optional
- (void)useQQ:(NSString *)msg;
- (void)useEmail:(NSString *)msg;
@required
- (void)oneHalfMonthMoney;
@end
@interface Agent : NSObject
@property (nonatomic, assign) id<RentHouseDelegate> delegate;
//租房源
- (void)rentHouse:(NSString *)des;
@end
//
// Agent.m
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import "Agent.h"
@implementation Agent
- (void)rentHouse:(NSString *)des{
NSLog(@"...........");
NSLog(@"找到了你要的%@", des);
//判断delegate是否存在
//判断delegate是否服从了我的协议,是否真的实现我的约定
if ([self.delegate respondsToSelector:@selector(useQQ:)]){
[_delegate useQQ:@"房子非常霸道"];
}
if ([self.delegate respondsToSelector:@selector(useEmail:)]) {
[_delegate useEmail:@"房子非常霸道"];
}
if ([self.delegate respondsToSelector:@selector(oneHalfMonthMoney)]) {
[_delegate oneHalfMonthMoney];
}
}
@end
//
// Person.h
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Agent.h"
@interface Person : NSObject<RentHouseDelegate>
- (void)needOneHouse;
@end
//
// Person.m
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)needOneHouse{
Agent *xiaowang = [[Agent alloc] init];
xiaowang.delegate = self;
[xiaowang rentHouse:@"干净整洁"];
}
//required方法必须实现
- (void)oneHalfMonthMoney{
NSLog(@"给你500");
}
- (void)useEmail:(NSString *)msg{
NSLog(@"email 接收到了");
}
@end
//
// Cat.h
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Agent.h"
@interface Cat : NSObject<RentHouseDelegate>
- (void)needOneHouse;
@end
//
// Cat.m
// 代理3
//
// Created by PXD on 15-4-16.
// Copyright (c) 2015年 PXD. All rights reserved.
//
#import "Cat.h"
@implementation Cat
- (void)needOneHouse{
Agent *xiaowang = [[Agent alloc] init];
xiaowang.delegate = self;
[xiaowang rentHouse:@"光线好 视野棒"];
}
- (void)oneHalfMonthMoney{
NSLog(@"400");
}
- (void)useQQ:(NSString *)msg{
NSLog(@"qq");
}
@end