iOS设计模式六大设计原则-责任链
iOS 设计模式 六大设计原则 责任链 返回上级目录:iOS面试专题一文章目录· 1.六大设计原则·o 1.1 单一职责o 1.2 开闭o 1.3 接口隔离o 1.4 依赖倒置o 1.5 里氏替换o 1.6 迪米特法则· 2.责任链·o 2.1 提出问题:业务逻辑顺序改变o 2.2 代码o§ BusinessObject.h§ BusinessObject.mo 2.3 解决问题1.六大设计原则· 任何一种设计模式都是遵从一定设计原则的1.1 单一职责1.2 开闭· 对成员变量的定义要谨慎,避免反复修改这个类1.3 接口隔离· UITableViewDatasource,UITableViewDelegate1.4 依赖倒置1.5 里氏替换· KVO,我们感知的是使用原有类1.6 迪米特法则2.责任链2.1 提出问题:业务逻辑顺序改变· 怎样从技术角度解决需求变更· 成员变量为当前类2.2 代码BusinessObject.h#import <Foundation/Foundation.h>class BusinessObject;typedef void(CompletionBlock)(BOOL handled);typedef void(ResultBlock)(BusinessObject *handler, BOOL handled);interface BusinessObject : NSObject/ 下一个响应者(响应链构成的关键)property (nonatomic, strong) BusinessObject *nextBusiness;/ 响应者的处理方法- (void)handle:(ResultBlock)result;/ 各个业务在该方法当中做实际业务处理- (void)handleBusiness:(CompletionBlock)completion;endBusinessObject.m#import "BusinessObject.h"implementation BusinessObject/ 责任链入口方法- (void)handle:(ResultBlock)result CompletionBlock completion = (BOOL handled) / 当前业务处理掉了,上抛结果 if (handled) result(self, handled); else / 沿着责任链,指派给下一个业务处理 if (self.nextBusiness) self.nextBusiness handle:result; else / 没有业务处理, 上抛 result(nil, NO); ; / 当前业务进行处理 self handleBusiness:completion;- (void)handleBusiness:(CompletionBlock)completion /* 业务逻辑处理 如网络请求、本地照片查询等 */end2.3 解决问题· 改变nextBusiness(nextResponder)的指向· 使用责任链模式来解决这种需求顺序变更调整的问题,C的nextBusiness为B,B的nextBusiness为A。这样就可以通过责任链的模式来解决这个问题· 如果产品经理要改成BCA。 只需要调整一下他们nextBusiness的指向· 可以把这种需求的调整改为sever动态下发的,每个业务号对应一个类,1-A,2-B,3-C。然后把他做成一个key-value形式的plist文件,然后通过后端去下发,调整相应的顺序。然后我们在代码中根据class的反射,解析出对应的类,然后按照数组的顺序去指定下一个nextBusiness。就可以实现业务需求顺序的动态调整 -全文完-