IOS代理

来源:互联网 发布:远程软件局域网 编辑:程序博客网 时间:2024/06/06 10:44

什么是代理,顾名思义就是帮别人做些事情,比如买房子,当我们买房子时,我们一般会找房屋中介,因为他们就是干这件事情,他们比我们普通人在这方面了解的多,此时房屋中介就是我们所谓的代理,他们将会提供买房者所需的资料,比如房屋的价格,房屋的面积等信息,根据以上环境我们开始编码,实现通过代理模式实现以上功能。

简单的代理实现:

1.代理,听到这个词我们很明确知道我们需要两个主角(1)买房子的人(person)(2)房子中介(medium),知道这些我们首先定义两个类:

Person类

#import <Foundation/Foundation.h>#import "Medium"@interface Person : NSObject@property(nonatomic,retain) Medium *delegate;// 买房    - (void)buyHome;@end@implementation Person- (void)buyHome{  double price = [_delegate homePrice];  double size  = [_delegate homeSize];  NSLog(@"房屋中介反馈:  房子价格:%f  房屋面积:%f",price,size);}- (void)dealloc{  // 成员变量用到retain关键字,必须在dealloc中销毁一次,这块不详细讲内存管理。    [_delegate replease];    [super dealloc];}@end

NOTE

person类都做了什么?

1):买房者需要买房,那我们必须提供一个买房的方法,buyHome()。

2):买房必须知道房屋的面积以及价格,这些信息必须通过房屋中介获取,因此我们需要将房屋中介引入到Person类中。

Medium类

#import <Foundation/Foundation.h>@interface Medium : NSObject// 房子的价格- (double)homeCost;// 房子大小- (double)homeSize;@end@implementation Medium// 房子的价格- (double)homeCost;{    return 1000000;}// 房子大小- (double)homeSize{    return 98;}@end

NOTE

medium类做了什么?

1):房屋中介需要从买房者哪里获取到房屋面积,以及出售的价格,以提供给买房者。

 

main类

#import <Fundation/Foundation.h>#import "Person"#import "Medium"int main(int argv,const char* argc[]){    @autoreleasepool    {        Person *person = [[[Person alloc]init]autorelease];        Medium *medium = [[[Medium alloc]init]autorelease];                // person获取中介的实例对象        person.delegate = medium;                // 中介提供房子的详细情况                [person buyHome];    }    return 0;}

 

流程图:(以下流程图是一个完整买房流程)

技术分享

 根据这个流程图我们再分析下买房这个过程:

1)房屋中介通过自己方式获取到卖方者的一切属性,比如房屋的价格,房屋的面积,房屋的地理位置。

2)房屋中介提供房源信息给买房者。

3)买房者决定最终是否购买房子。

这个流程图中我们只需要关注橙色区域的对象,买房者和房屋中介。

买房者:中介我想了解下现有房源的价格,面积,地址。

中介:我们这里现在有100*100m,价格在200W的房子,地址在上海泗泾,你看是否需要。

买房者:这套房子还不错,考虑下,还有其他选择嘛。

中介:必须有……。

 

正直意义的代理:

以上是一个简单的代理模式,买房者无需通过卖方者的获取房屋信息,一家一家问太累了,直接问中介多省事,但是有个问题,如果买房者把这件事情和其他人交流了下,其中有人说,这家中介太黑了,收取的中介费比其他中介高的高,此刻怎么办,最简单的方式就是换另外一家中介,那程序中又是如何实现。

分析:

此刻我们需要把那家中介(medium)从我们的person类中剔除,person需要一个动态的中介,可以选择的中介。

如果是这样,我们就必须定义协议,如果那个中介想申请当我的代理,那就必须遵守我们的协议,不然我就不考虑,那我协议中都定义什么方法了,和上面的方法一样,一个是房子的价格,一个是房子的面积。

协议的定义:

@protocol BuyHomeDelegate : NSObject// optional 中定义的方法是可选择性的实现@optional// required 中定义的方法必须实现@required- (double)homePrice;- (double)homeSize;@end

 

person+medium类

#import <Foundation/Foundation.h>#import "Medium"#import "BuyHomeDelegate"@interface Person : NSObject@property(nonatomic,retain) id<BuyHomeDelegate> delegate;// 买房    - (void)buyHome;@end@implementation Person- (void)buyHome{  double price = [_delegate homePrice];  double size  = [_delegate homeSize];  NSLog(@"房屋中介反馈:  房子价格:%f  房屋面积:%f",price,size);}- (void)dealloc{  // 成员变量用到retain关键字,必须在dealloc中销毁一次,这块不详细讲内存管理。    [_delegate replease];    [super dealloc];}@end#import <Foundation/Foundation.h>#import "BuyHomeDelegate"@interface Medium : NSObject <BuyHomeDelegate>// 房子的价格- (double)homeCost;// 房子大小- (double)homeSize;@end@implementation Medium// 房子的价格- (double)homeCost;{    return 1000000;}// 房子大小- (double)homeSize{    return 98;}@end#import <Fundation/Foundation.h>#import "Person"#import "Medium"int main(int argv,const char* argc[]){    @autoreleasepool    {        Person *person = [[[Person alloc]init]autorelease];        Medium *medium = [[[Medium alloc]init]autorelease];                // person获取中介的实例对象        person.delegate = medium;                // 中介提供房子的详细情况                [person buyHome];    }    return 0;}
0 0
原创粉丝点击