美文网首页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