设计模式 - 职责链模式

本文摘自书籍《设计模式》
此系列文章GitHub地址

行为型 - 职责链模式(Chain Of Responsibility Pattern)

定义

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象链接成一条链,并且沿着这条链传递请求,知道有对象处理它为止。是对象行为型模式。

模式结构

public abstract Handler {
    protected Handler nextHandler;

    public void setHandler(Handler handler) {
        this.nextHandler = handler;
    }

    void handle(String request);
}

public class HandlerA extends Handler {
    public void handle(String request) {
        if(request.equals("条件")){
            //处理
        }
        else {
            nextHandler.handle();
        }
    }
}

public class HandlerB extends Handler {
    public void handle(String request) {
        if(request.equals("条件")){
            //处理
        }
        else {
            nextHandler.handle();
        }
    }
}
  • Handler

    抽象处理类,定义了一个处理请求的接口,它一般被设计为抽象类,由于不同的具体矗立着处理请求的方式不同,因此在其中定义了抽象请求的处理方法。因为每一个处理者的下家还是一个处理者,所以在抽象处理者中定义了一个相同类型的属性,作为下家的引用。

  • HandlerA

    具体处理类,是抽象处理类的子类,它可以处理用户请求,在具体处理者类中实现了抽象处理者中定义的抽象请求处理方法,在处理请求之前需要进行判断,看是否有处理权限,如果没有,则交给下家处理。

优点

职责链模式的优点:

  • 降低耦合度,职责链模式使得一个对象无需知道是其他哪一个对象处理请求。对象仅需知道该请求会被处理即可,接受者和发送者都没有对方的明确信息,且链中的对象不需要知道链的结构,由客户端负责链的创建。
  • 可简化对象的相互连接:请求处理对象仅需维持一个纸箱其后继者的引用,而不需要维持它对所有候选处理者的引用。
  • 增强给对象指派职责的灵活性:在给对象分派职责时,职责链可以给我们带来更多的灵活性。
  • 增加新的请求处理类很方便。

缺点

职责链模式的缺点:

  • 不能保证请求一定会被接收
  • 对于比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响,而且在进行代码调试时不太方便,如果建链不当,可能造成循环调用。

适用环境

职责链模式的适用环境:

  • 多个对象可以处理一个请求,具体是那个对象处理,由运行时自动确定,客户端只需提交请求即可。
  • 在不明确指定接受者的情况下,向多个对象中的一个提交一个请求,请求的发送者与请求的处理者解耦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值