装饰模式在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
原创粉丝点击