Proxy(代理模式)
来源:互联网 发布:双色球算法必中6红 编辑:程序博客网 时间:2024/06/06 14:15
定义:provide a surrogate or placeholder for another object to control access to it
为其他对象提供一种代理以控制对这个对象的访问
代理模式其实很简单,只是我一直不明白为什么要这样做
我们同样以一个问题引入,比如 我们有一个叫做Server的类,这个类提供一个叫做getData的方法,该方法返回给用户一些数据,简单起见,就返回一个int类型的1好了。
#import <Foundation/Foundation.h>@interface Server : NSObject-(int) getData;@end
#import "Server.h"@implementation Server-(int) getData{ return 1;}@end
客户端调用的时候就需要这样
Server* server=[[Server alloc] init]; [server getData];
好了 这其实很棒,但是 现在我想在Server中间插入一个代理,控制你对Server的访问,于是 我对Server重新调整一下,添加一个叫做AbstractServer的类,这个类提供一个抽象方法叫做getData,然后让Server去继承这个类,同时,我创建一个新的类叫做 ServerProxy,这个类继承AbstractServer类,代码如下
#import <Foundation/Foundation.h>@interface AbstractServer : NSObject-(int) getData;@end这是一个抽象类
#import "AbstractServer.h"@interface Server : AbstractServer@end
#import "Server.h"@implementation Server-(int) getData{ return 1;}@end
Server的继承变了,继承自AbstractServer
#import "AbstractServer.h"@interface ServerProxy : AbstractServer@property (nonatomic,strong) AbstractServer* server; //这里添加一个调用对象是AbstractServer 目的是可能多重代理@end
#import "ServerProxy.h"#import "Server.h"@implementation ServerProxy@synthesize server=_server;-(AbstractServer*) server //为server创建一个默认的代理{ if (_server==nil) { _server=[[Server alloc] init]; } return _server;}-(int) getData{ return [self.server getData];}@end
好了 这时候客户端调用就变了,变成这样
ServerProxy* proxy=[[ServerProxy alloc] init]; [proxy getData]; //直接使用默认代理的server访问
这样 我们在真正的Server中插入了一个代理,然后让代理去访问Server获取data。
这就是Proxy模式
到这里 你一定会疑惑。。这到底有什么用,为什么要再中间插入这一层,其实 我当初也由这个疑惑
你可以这样想,比如 在天朝,我想访问facebook,我是不是要用代理,因为我会被天朝拦截,那同样,在我看来 你换到你的代码中也一样,或许你不想让这个类有这个权限,因为你想做到类的单一职责原则。这是其一
其二,你的代理模式的getData可以变成这样
-(int) getData{ //do something return [self.server getData];}
多了一个do something,do something可以去判断访问server的权限,这样能够更好的控制Server的访问,这就是我认为为什么要加入代理模式的原因了
好了 我们回到定义 其实就是为Server提供一个代理叫做ServerProxy,然后这两个同样类具有共同的接口,同时借助代理 我们控制了对Server的访问,这就是代理模式
0 0
- Proxy模式 代理模式
- 代理模式:Proxy模式
- 代理(Proxy)模式
- 代理模式Proxy Design
- 代理(Proxy)模式
- 代理(Proxy)模式
- 代理模式(Proxy Pattern)
- 代理(Proxy)模式
- 代理模式(Proxy Pattern)
- proxy(代理)模式
- Proxy Pattern (代理模式)
- Proxy pattern 代理模式
- 代理模式(Proxy)
- java 代理(proxy)模式
- Proxy 代理模式
- 代理模式(Proxy)
- 代理模式(Proxy pattern)
- Proxy(代理)模式
- 服务器端数据访问
- grey world normalization
- spring 源代码解析
- 关于git中分支的困惑
- SSH框架联合开发(Annotation精简Spring的配置文件)
- Proxy(代理模式)
- mysql查询操作及正则表达式小结
- WiFi共享精灵,女人网购的好选择
- 郑州市社保需要知道的基本常识
- 耶鲁大学新任校长如何深度揭秘情商
- 非对称加密技术RSA详解(python实现版本)
- 周立功对人才的看法
- Create Spring MVC dynamic web project with Maven and make it support Eclipse IDE
- 我的百度网盘里面的光盘镜像 汇总