美文网首页
Objectivc-c减少层级过多的if else的责任链模式

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

作者: 2f976237cee2 | 来源:发表于2018-01-16 14:54 被阅读69次

    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的方式自定义函数传递,谢谢~

    相关文章

      网友评论

          本文标题:Objectivc-c减少层级过多的if else的责任链模式

          本文链接:https://www.haomeiwen.com/subject/orvsoxtx.html