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)]

相关文章
|
7月前
|
设计模式 Java
【设计模式系列笔记】责任链模式
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理它。每个处理者都有一个对下一个处理者的引用。责任链模式常用于处理请求的场景,例如在一个请求需要经过多个步骤或者多个对象来处理的情况下。
80 0
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
55 9
|
21天前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
36 0
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,推荐查阅“简洁”系列教程。本文通过学生会经费申请的例子,介绍了责任链模式及其在Kotlin中的实现,并使用偏函数进行了改进,使代码更加简洁和灵活。
15 0
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
38 0
|
2月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
42 0
|
3月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
27 0
|
4月前
|
设计模式 算法 Java
【十六】设计模式~~~行为型模式~~~策略模式(Java)
文章详细介绍了策略模式(Strategy Pattern),这是一种对象行为型模式,用于定义一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法独立于使用它的客户而变化,提高了系统的灵活性和可扩展性。通过电影院售票系统中不同类型用户的打折策略案例,展示了策略模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和测试结果。
【十六】设计模式~~~行为型模式~~~策略模式(Java)