美文网首页iOS开发笔录iOS开发iOS学习
iOS设计模式之责任链模式

iOS设计模式之责任链模式

作者: 3697d6c42285 | 来源:发表于2017-05-21 12:53 被阅读67次

    责任链模式

    1、什么是责任链模式

    在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

    责任链中主要有两个属性:

    • 链接下一个对象的属性
    • 对应的响应方法

    链接对象实现事件的传递、响应方法判断是否能自己可以处理该请求。是一种十分典型的链式结构 。

    在正常的生活中,也有这样的情况,比如说一个办公室内有5个 iOS(ABCDE) ,有一天,产品发现了一个 bug 然后问第一个 iOS A:“能不能处理这个 bug?” 而 A 表示:“我并不负责这一部分的内容,你可以去问一下 B(第二个 iOS)” 接着产品就去问了B ,B 也表示他不负责这块,并把产品推给C,此时 C 表示他可以处理,则责任到此结束,C 被喊去修改 BUG 了,也不用再去询问 D 跟 E 了。

    2、责任链模式用在什么地方

    • 有多个对象可以处理同一个请求,动态确定谁可以处理该请求
    • 不明确指定接受者的情况下,给多个对象中的其中一个对象发送请求
    • 动态指定一组对象实现请求

    虽然说责任链一般是指当一个对象可以处理时候停止传递,但是在有需求的时候,就算不停止传递也没有关系。

    3、责任链模式的使用

    1. 定义责任父类,定义链接到下一个对象的属性和需要进行传递的方法.
    2. 定义责任子类,判断是否能够处理,实现处理方案,并链接到下个责任子类。

    在 iOS 中,有许多情况使用到了责任链模式,最典型的就是响应链。一层层的往下,直到有对象可以接受为止。

    4、总结

    责任链模式是比较经典和简单的一种设计模式,不过使用范围比较小,因为不容易调试,所以容易被其他的设计模式所取代(例如迭代器模式什么的)。
    至于他本身的话,具有解耦合、简化使用和增加灵活性等优点,不过需要注意的一点是有可能会存在没有人可以处理的情况,此时则需要特别判断。

    5、demo

    class DutyHandle : NSObject {
        /// 下一个
        var next : DutyHandle?
        
        /// 处理请求操作
        func handleRequest(str:String) {
            /// 如果可以则直接处理
            if (self.canDealWithRequest(str: str)){
                print(str)
            }
            else {
                /// 否则如果有下一个,则下一个进行处理判断
                if ((next) != nil) {
                    next?.handleRequest(str: str);
                }
            }
        }
        
        /// 判断能否处理请求
        func canDealWithRequest(str:String) -> Bool {
            return false;
        }
    }
    

    相关文章

      网友评论

        本文标题:iOS设计模式之责任链模式

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