GOF设计模式之责任链模式(行为型模式)

简介: GOF设计模式之责任链模式(行为型模式)

🌚责任链模式是什么


责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。


🌚责任链模式能干什么


职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。


🌚责任链模式优缺点


优点

1、降低耦合度。它将请求的发送者和接收者解耦。 该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和


接收者也无须拥有对方的明确信息。


2、简化了对象。使得对象不需要知道链的结构。


3、增强给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责


任。


4、增加新的请求处理类很方便。


5、责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的


if 或者 if···else 语句。


6、责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原


则。


缺点

1、不能保证请求一定被接收。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到


处理。


2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。 职责链建立的合理性要靠客户端来保证,增加了


客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。


3、可能不容易观察运行时的特征,有碍于除错。对比较长的职责链,系统复杂度上升,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。


🌚责任链模式组成部分


抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。因为每一个处理者的下家还是一个处理者,因此在抽象处理者中定义了一个抽象处理者类型的对象(如结构图中的successor),作为其对下家的引用。通过该引用,处理者可以连成一条链。

具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,在处理请求之前需要进行判断,如果可以处理请求则处理,否则将该请求转给它的后继者。

客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。


🌚辅助图示


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6XoZs0Kv-1630037488961)(/Users/fanlongfei/Downloads/责任链模式.png)]


🌚代码示例

1、抽象处理角色

public abstract class Handler {
  //维持对下家的引用
    private Handler next;
    public Handler getNext() {
        return next;
    }
    public void setNext(Handler next) {
        this.next = next;
    }
    public abstract void handleRequest(String opration);
}

2、具体处理角色

public class ConcreteHandler1 extends Handler{
  /**
  * 满足当前处理者条件则处理,不满足则请求转发
  */
    @Override
    public void handleRequest(String opration) {
        if (opration.equals("need ConcreteHandler2 Opration")) {
            System.out.println("具体处理者2负责处理该请求!");
            //业务方法
        } else {
            //业务方法
            if (getNext() != null) {
                getNext().handleRequest(opration);
            } else {
                //业务方法
                System.out.println("没有人处理该请求!");
            }
        }
    }
}
public class ConcreteHandler2 extends Handler{
    @Override
    public void handleRequest(String opration) {
        if (opration.equals("needConcreteHandler1 Opration")) {
            System.out.println("具体处理者1负责处理该请求!");
            //业务方法
        } else {
            //业务方法
            if (getNext() != null) {
                getNext().handleRequest(opration);
            } else {
                //业务方法
                System.out.println("没有人处理该请求!");
            }
        }
    }
}

3、client

public class TestClient {
    public static void main(String[] args) {
        //组装责任链
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        handler1.setNext(handler2);
        //提交请求
        handler1.handleRequest("need ConcreteHandler2 Opration");
    }
}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AMv9fX1C-1630037488963)(/Users/fanlongfei/Library/Application Support/typora-user-images/image-20210827121040242.png)]

相关文章
|
2天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
1月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
42 3
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
59 9
|
28天前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
26 0
|
1月前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
39 0
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,推荐查阅“简洁”系列教程。本文通过学生会经费申请的例子,介绍了责任链模式及其在Kotlin中的实现,并使用偏函数进行了改进,使代码更加简洁和灵活。
19 0
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
42 0
|
2月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
47 0
|
3月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)

热门文章

最新文章