设计模式之责任链模式

简介: 定义责任链模式是结构型设计模式的一种,它将请求的发送者与接收者解耦,给多个对象处理请求的机会。请求沿着链传递,直到链上的接收对象可以处理该请求为止。

定义


责任链模式是结构型设计模式的一种,它将请求的发送者与接收者解耦,给多个对象处理请求的机会。请求沿着链传递,直到链上的接收对象可以处理该请求为止。


场景


责任链模式在框架中使用较多,可以为框架提供扩展点,让框架的使用者基于扩展点扩展新的功能,如 Servlet 规范中的 Filter、Spring 的拦截器,都使用了责任链模式。


实现


根据责任链的定义,使用 Java 代码实现如下。


public interface IHandler {  
    boolean handle();  
}
public class HandlerChain {
    private List<IHandler> handlerList = new ArrayList<>();
    public void addHandler(IHandler handler) {
        this.handlerList.add(handler);
    }
    public void handle(){
        for (IHandler handler : handlerList) {
            if(handler.handle()){
                break;
            }
        }
    }
}

使用代码如下。

public class App {
    public static void main(String[] args) throws IOException {
        HandlerChain chain=new HandlerChain();
        chain.addHandler(new IHandler() {
            @Override
            public boolean handle() {
                return false;
            }
        });
        chain.handle();
    }
}

上面的实现使用列表保存链中的每个接收对象,换成链表也可以,使用列表实现则相对简单。事实上责任链模式还有一种变体,链上的所有接收对象都可以处理请求。

目录
相关文章
|
6月前
|
设计模式 Java
【设计模式系列笔记】责任链模式
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理它。每个处理者都有一个对下一个处理者的引用。责任链模式常用于处理请求的场景,例如在一个请求需要经过多个步骤或者多个对象来处理的情况下。
80 0
|
6月前
|
设计模式 Java
【设计模式】责任链模式
【设计模式】责任链模式
|
6月前
|
设计模式
【设计模式】责任链模式
【1月更文挑战第27天】【设计模式】责任链模式
|
30天前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
55 9
|
18天前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
36 0
|
29天前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,推荐查阅“简洁”系列教程。本文通过学生会经费申请的例子,介绍了责任链模式及其在Kotlin中的实现,并使用偏函数进行了改进,使代码更加简洁和灵活。
15 0
|
1月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
37 0
|
1月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
42 0
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
1月前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
26 0