代理回调分析和OC实现
来源:互联网 发布:金山数据恢复会员共享 编辑:程序博客网 时间:2024/05/21 05:21
代理模式是一种很重要的设计模式,它的核心思想是通过代理接口分离使用者和服务提供者,降低了模块之间的耦合度。在实际中灵活使用代理模式可以让我们写出更优质的模块结构的代码。
那么代理模式具体是怎么样实现的呢?
举一个简单的例子:
用户在浏览器中点击一个文件链接(例如百度网盘的文件)想要下载这个文件,【浏览器此时会自动解析该地址的目标IP,然后往这个IP发送相应的GET请求,对方服务器做出响应返回文件】之后浏览器接收文件保存到用户的硬盘上,用户浏览下载好的文件。
解析:
这个例子中浏览器就是一个用户的代理,他帮助用户执行了中括号括起来的内容,而用户对代理做的事情毫不知情,也完全不关心,他们只关心下载了的文件。
使用UML图可以作如下表示:
整个过程就是:用户使用浏览器下载文件,接着浏览器使用事先定义的协议将下载好的文件保存在用户的硬盘上。
浏览器不限一种,只要能实现协议的浏览器,就就帮助用户下载并保存文件,体现出代理模式的优势。
OC实现代码
代理接口 MessageDeliver.h↓
#import <Foundation/Foundation.h>@protocol MessageDeliver <NSObject>- (void)sendMessageToPerson:(NSString *)message;@end
用户类Person.h↓
#import <Foundation/Foundation.h>#import "MessageDeliver.h"@interface Person : NSObject <MessageDeliver>@property (copy) NSString *file;- (void)startDL:(NSString *)path;@end
Person.m↓
#import "Person.h"#import "Downloader.h"@implementation Person- (void)startDL:(NSString *)path{ Downloader *downloader = [[Downloader alloc]init]; downloader.delegate = self; [downloader downloadFile:path];}- (void)sendMessageToPerson:(NSString *)message{ self.file = message;}@end
浏览器类Downloader.h↓
#import <Foundation/Foundation.h>#import "MessageDeliver.h"@interface Downloader : NSObject@property id<MessageDeliver> delegate;- (void)downloadFile:(NSString *)path;@end
Downloader.m↓
#import "Downloader.h"@implementation Downloader- (void)downloadFile:(NSString *)path{ // 浏览器具体处理代码 NSLog(@"正在下载... ..."); [self.delegate sendMessageToPerson:[NSString stringWithString:path]];}@end
main.m↓
#import <Foundation/Foundation.h>#import "Person.h"#import "Downloader.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person *person= [[Person alloc]init]; [person startDL:@"下载链接"]; NSLog(@"%@", person.file); } return 0;}
以上。
0 0
- 代理回调分析和OC实现
- OC简单实现代理
- oc-protocol和代理
- OC-Protocol实现业务代理
- OC语言笔记(八):OC代理、协议和NSDate
- OC语言 block 和 代理模式
- 黑马程序员---oc 协议和代理
- OC中代理和通知的概念
- JDK和Cglib实现动态代理实例及优缺点分析
- JAVA 动态代理(proxy)的实现和源码分析
- JAVA 动态代理(proxy)的实现和源码分析
- 动态代理的实现分析
- OC运行和方法实现
- 黑马程序员_ 利用oc的协议实现代理模式
- 利用OC的消息转发机制实现多重代理
- 排列算法分析及实现(C/OC)
- golang 实现HTTP代理和反向代理
- 爬爬爬之路:OC语言(七) NSDate , 协议和代理
- 使用AsyncTask异步更新UI界面
- 分桃记
- hdu 1588
- 修改eclipse界面
- HDU 1251 统计难题
- 代理回调分析和OC实现
- Android设置全屏
- HDU 5365
- HDU1000 A + B Problem
- Cocos2d-x过程动作CCProgressTo示例学习笔记
- Eclipse中的Web项目自动部署到Tomcat
- JavaSE基础--(二)IO部分
- PAT (Basic Level) Practise (中文)1001. 害死人不偿命的(3n+1)猜想
- CentOS 7 安装Nginx做反向代理