装饰模式在iOS开发中的应用
来源:互联网 发布:centos安装nginx 编辑:程序博客网 时间:2024/05/16 16:23
装饰模式在iOS开发中的应用
装饰模式
动态的给一个对象加一些额外的职责,就增加功能来讲,装饰模式比生成子类来讲更为灵活
例如我们对网络请求的api封装,有一个APIManager,在网络请求成功之后需要通知到一个代理(一般是vc):请求成功了,数据已拿到,可以把数据交由view显示了。
通常这个manager是继承了baseManager,并且在继承之后重写了 successCallBackDelegate 用于处理对应接口拿到的数据。
对于不同的接口,请求成功,数据拿到之后的数据解析肯定不同,的如果直接继承vc来处理,并且,代理的设置直接在子类中设置,这样的话,接口太多,子类也就太多了。
子类(子装饰者)APIManager
- (void)beforePerformSuccessWithResponse:(ZKURLResponse *)response{// 在这里可以灵活扩展一些功能,之后再调用super的方法交给vc处理 [super beforePerformSuccessWithResponse:response];}
父类(父装饰者)APIBaseManager
- (void)beforePerformSuccessWithResponse:(ZKURLResponse *)response{ if (self != self.interceptor && [self.interceptor respondsToSelector:@selector(manager:beforePerformSuccessWithResponse:)]) { [self.interceptor manager:self beforePerformSuccessWithResponse:response]; }}
vc (被装饰者)
-(void)viewdidload{APIXXXManager *manager = [[APIXXXManager alloc]init];manager.interceptor = self;// (装饰一下vc) 在子装饰者调用super的方法时,我可以先扩展一些功能,比如数据解析等等manager2.interceptor = self; // 继续装饰一下vc,让manager2处理好manager2相关的数据。}- (void)manager:(APIBaseManager *)manager beforePerformSuccessWithResponse:(URLResponse *)response{// 根据拿到的数据response处理view}
iOS这里与传统的c++装饰模式不太一样,一般的装饰者模式,decorator 会保有一份被装饰的对象,这里被装饰的对象可以是其父类,但是在iOS中“被保有”的对象就是delegate,这个delegate一般是vc。
说白一点,就是给vc灵活添加一些功能(装饰)–比如原始网络数据的处理,而又不用继承vc。
总结:为了让被装饰者的一个方法在执行前或者执行后进行一些预处理或者后处理。起到装饰执行者的一个方法的目的。
0 0
- 装饰模式在iOS开发中的应用
- MVC模式在IOS开发中的应用
- 装饰器模式在Struts2中的应用
- 设计模式在游戏中的应用--装饰模式(三)
- 装饰模式在Java I/O库中的应用
- 装饰者模式在Java 字节输入流中的应用
- 装饰者模式在Java I/O中的应用
- 实例讲解如何在iOS应用开发中使用设计模式中的代理模式
- 《JAVA与模式》之装饰模式(Decrator)以及装饰模式在Java I/O中的应用
- [转]设计模式在Java I/O中的应用(装饰模式和适配器模式)
- 代理模式在企业级开发中的应用
- 设计模式在GIS开发中的应用
- 设计模式在游戏开发中的应用
- 设计模式 - 在软件开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- mysql linux下源码安装错误集锦
- 如何重装win7
- XML解析之DOM解析一层解析1
- TCP首部
- 线程(六)线程池
- 装饰模式在iOS开发中的应用
- CocoaPods升级后(最新版本1.0.1),安装第三方库的时候会报如下错误:
- Struts2实现文件上传下载
- springMVC-@RequestMapping注解
- 【Leetcode】valid perfect square
- Python学习笔记1:Python入门
- redis 密码时 重启问题
- <fmt:formatNumber>标签
- java中语句的分类