代理设计模式
来源:互联网 发布:男士 羽绒服推荐 知乎 编辑:程序博客网 时间:2024/06/06 01:34
代理设计模式
- 【代理模式: 】
- 【案例分析: 】
- 【代码实现: 】
【代理模式: 】
一个类A无法完成需要完成的某个方法,然后由A提供一个协议,类B遵守这个协议来代替A完成这个方法,这样的设计模式就是代理模式。使用代理模式,在A被封装好之后,需要修改它的执行方法的时候只需要对代理对象修改即可。
【案例分析: 】
有一个Jack的人,他想租一套公寓,由于工作繁忙,他没有时间去租房,因此他委托中介帮忙给他找房源找到房源就告知他,如果房租太贵Jack就委托中介继续找,知道找到合适的为止。
首先要有Person这个类,对象是Jack,Jack有一个找房子的方法,但是这个方法他不能完成,需要有中介来完成,因此还要有Agent这个类,显然,不是所有的中介都可以给Jack找房子,只有Jack委托的中介对象才可以找,这就要有一个协议来约定谁能给Jack找房子。现在我们就来实现它:
【代码实现: 】
<Person类>//声明文件@interface Person : NSObject{ //实例化属性 NSString *_name; id<LookingForApartment> _delegate;}//set方法- (void)setName:(NSString *)name;- (void)setDelegate:(id<LookingForApartment>)delegate;//get方法- (NSString *)name;- (id)delegate;//找房子- (void)findHouse:(NSTimer *)timer;@end//实现文件@implementation Person//set方法- (void)setName:(NSString *)name{ _name = name;}- (void)setDelegate:(id<LookingForApartment>)delegate{ _delegate = delegate;}//get方法- (NSString *)name{ return _name;}- (id)delegate{ return _delegate;}//找房子- (void)findHouse:(NSTimer *)timer{ int rent = [_delegate lookingForApartment]; if (rent <= 2000) { NSLog(@"这个房租付得起,就这个了��"); [timer invalidate]; return; }else{ NSLog(@"房租太贵,住不起,再找一个吧。。"); }}@end//Person类提供的协议#import <Person.h>@protocol LookingForApartment <NSObject>//Person提供一个找房子的协议- (int)lookingForApartment;@end<Agent类>//声明文件//Agent要遵守这个协议@interface Agent : NSObject <LookingForApartment>//实现文件//Agent实现这个协议提供的方法@implementation Agent- (int)lookingForApartment{ int rent; NSLog(@"找到一个房子,房租是:"); scanf("%d", &rent); return rent;}@end<main.m文件>#import "Person.h"#import "Agent.h"int main(int argc, const char * argv[]) { @autoreleasepool { //创建对象 //找房子的对象 Person *jack = [[Person alloc] init]; //中介的对象 Agent *agent = [[Agent alloc] init]; jack.name = @"jack"; //设置找房子的委托对象 jack.delegate = agent; //jack找房子 //设置定时器,让Jack一直调用findHouse方法,直到满足条件 [NSTimer scheduledTimerWithTimeInterval:1 target:jack selector:@selector(findHouse:) userInfo:@"" repeats:YES]; [[NSRunLoop currentRunLoop] run]; } return 0;}
【运行结果: 】2015-07-28 08:57:02.408 7-27-homework[553:20271] 找到一个房子,房租是:80002015-07-28 08:57:07.357 7-27-homework[553:20271] 房租太贵,住不起,再找一个吧。。2015-07-28 08:57:07.411 7-27-homework[553:20271] 找到一个房子,房租是:30002015-07-28 08:57:13.765 7-27-homework[553:20271] 房租太贵,住不起,再找一个吧。。2015-07-28 08:57:14.406 7-27-homework[553:20271] 找到一个房子,房租是:20002015-07-28 08:57:21.258 7-27-homework[553:20271] 这个房租付得起,就这个了
【注意 : 】协议由哪个类提出的,一般放在那个类的.m文件中,协议一般不单独创建一个文件。
0 0
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式 代理模式
- 设计模式-【代理模式】
- 设计模式-代理模式
- 设计模式----代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式--代理模式
- 设计模式-代理模式
- 设计模式- 代理模式
- 设计模式---代理模式
- 设计模式 - 代理模式
- 【设计模式】代理模式
- arm-linux-gcc(ubuntu)安装
- JSON和JSONP
- Java集合数组列表中的数据排序
- (1) SQL简介
- 二维数组中的查找(剑指offer)
- 代理设计模式
- log4j:WARN 警告
- HDU 1556 Color the ball (简单树状数组)
- linux下配置网络
- Xpage重复控件的使用(repeat)
- POJ 1163 The Triangle (数塔)
- 电机飞车现象
- HttpClient4.3 第二次封装
- 基于 DOM 的跨站点脚本编制