责任链

责任链

目的

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。

类图

角色

  • 抽象处理者(Handler)角色:定义了处理请求的接口或者抽象类,提供了处理请求的的方法和设置下一个处理者的方法。
  • 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。

image.png

实现

抽象处理类

public abstract class Handler {
    protected Handler nextHandler;

    public Handler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    protected abstract boolean handleRequest(Request request);
}

请求信息

@Data
public class Request {
    private RequestType type;

    public Request(RequestType type) {
        this.type = type;
    }
}

具体处理类

public class ConcreteHandler1 extends Handler {
    public Director(Handler nextHandler) {
        super(nextHandler);
    }

    @Override
    public void handleRequest(Request request) {
        if (request.getType() == RequestType.type1) {
            // 进行处理
        }
        return nextHandler.handleRequest(request);   // 提交给下一个处理者处理
    }
}
public class ConcreteHandler2 extends Handler {
    public Director(Handler nextHandler) {
        super(nextHandler);
    }

    @Override
    public void handleRequest(Request request) {
        if (request.getType() == RequestType.type2) {
            // 进行处理
        }
    }
}

客户端

 public static void main(String[] args) {  
        Handler handler2 = new ConcreteHandler1(null);  
        Handler handler1 = new ConcreteHandler2(handle2);  

        Request req = new Request(RequestType.type2);  
        handle1.handleRequest(req);  
    }  

优缺点

优点

  1. 降低耦合度:客户端不需要知道请求由哪个处理者处理,而处理者也不需要知道处理者之间的传递关系,由系统灵活的组织和分配。
  2. 良好的扩展性:增加处理者的实现很简单,只需重写处理请求业务逻辑的方法。

缺点

  1. 请求会从链头发出,直到有处理者响应,在责任链比较长的时候会影响系统性能。
  2. 请求递归,调试排错比较麻烦。

使用场景

当客户提交一个请求时,请求是沿链传递直至有一个对象负责处理它。

JDK 应用

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇