Objectivc-c减少层级过多的if else的责任链模式

2018-01-16  本文已影响69人  2f976237cee2

Objectivc-c减少层级过多的if else

目标:通过数组的方式传入if中的条件,有责任链组件返回该条件应该执行的方法

实例Demo

先上一张实际遇到的需求的一张图:

示意图.png

以上有四个条件,每个条件都是一种枚举,组合起来,就对应不同的方法或者相同的方法,这个时候如果用if else的方式书写代码的话,应该就是一塌糊涂。此时,引入了一种模式:责任链模式

责任链是一种设计模式,可以百度或者google一下看看具体的文字解释,下面我画一张图来解释一下什么叫责任链。

流程图.png

责任链的意思就是各个条件一一对应组合对应一种输出方式,大致意思如此。

代码Demo

有了这样需求,则有了大致的解决思路。自定义了两个Object:

1. ChainObject

用于存放一个函数以及该函数对应的条件枚举数组,在这个对象中的数组,是由字符串组成,而这个字符串,是有一个个的条件拼接组成的字符串,例如传入的条件为 1 2 1 2,则通过NSString的一个扩展,将这样的数字拼接为1,2,1,2

相当于用这个组件将传入的条件数组转义一次,生成字符串存储在此类中

2. QTResponsabilityChain

用于存放所有的ChainObject,即生成了一个ChainObject的数组以及默认的方法,因为当传入的条件不满足存放于组件的任何条件时,将会执行默认的方法。

注意: 存入的条件顺序以及执行时传入的条件顺序要保持一致,不然产生bug

附上代码链接:https://github.com/YvanCheng/ResponseChain

欢迎留言指教,demo中函数传递会报出警告,可通过category的方式自定义函数传递,谢谢~

上一篇下一篇

猜你喜欢

热点阅读