代理设计模式
2015-10-08 14:04
288 查看
代理设计模式
【代理模式: 】【案例分析: 】
【代码实现: 】
【代理模式: 】
一个类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] 找到一个房子,房租是: 8000 2015-07-28 08:57:07.357 7-27-homework[553:20271] 房租太贵,住不起,再找一个吧。。 2015-07-28 08:57:07.411 7-27-homework[553:20271] 找到一个房子,房租是: 3000 2015-07-28 08:57:13.765 7-27-homework[553:20271] 房租太贵,住不起,再找一个吧。。 2015-07-28 08:57:14.406 7-27-homework[553:20271] 找到一个房子,房租是: 2000 2015-07-28 08:57:21.258 7-27-homework[553:20271] 这个房租付得起,就这个了
【注意 : 】协议由哪个类提出的,一般放在那个类的.m文件中,协议一般不单独创建一个文件。
相关文章推荐
- text-overflow:ellipsis
- 关于职业生涯规划的会议记录
- 职场新人,你进入职场应该规划的事
- 字符串的正则表达式
- linux——创建用户及所属组总结
- YII1升级到YII2的注意事项
- LeetCodeOJ.Longest Substring Without Repeating Characters
- 最长递增子序列
- 数学问题和狼追兔问题
- eclipse下修改tomcat的URIEncoding为UTF-8
- 计算1/1-1/2+1/3-1/4......+1/99-1/100的值
- 详细透彻的分析DM9000网卡驱动程序(1)
- 分享txt转换pdf格式具体转换方法
- sh脚本语法_基础
- 在一个Activity 里面去关闭另一个Activity或者多个Acitivity
- 各种RAID的理解
- 20个非常有用的Java程序片段
- Java 理论与实践: 变还是不变?
- 惠普公司将拆成两家公司
- GET 和 平 POST 的区别详解