java 设计模式_行为型_21责任链模式

21.责任链模式

责任链模式(Chain of Responsibility) 是行为型设计模式之一,其将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。
接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。

UML类图:
java 设计模式_行为型_21责任链模式_第1张图片

1.接口:

public interface Handler {
    void operator();
}

2.抽象类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class AbstractHandler {
    private Handler handler;
}

3.处理链

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyHandler extends AbstractHandler implements Handler {


    private String name;


    @Override
    public void operator() {
        System.out.println(name+"deal!");
        if (getHandler()!=null){
            getHandler().operator();
        }
    }
}

4.测试

public class ChainTest {
    public static void main(String[] args) {
        MyHandler h1 = new MyHandler("h1");
        MyHandler h2 = new MyHandler("h2");
        MyHandler h3 = new MyHandler("h3");

        h1.setHandler(h3);
        h3.setHandler(h2);

        h1.operator();
    }
}
  • 优缺点:
    • 优点
      • 解耦了请求与处理;
      • 请求处理者(节点对象)只需关注自己感兴趣的请求进行处理即可,对于不感兴趣的请求,直接转发给下一级节点对象;
      • 具备链式传递处理请求功能,请求发送者无需知晓链路结构,只需等待请求处理结果;
      • 链路结构灵活,可以通过改变链路结构动态地新增或删减责任;
      • 易于扩展新的请求处理类(节点),符合 开闭原则;
    • 缺点
      • 责任链路过长时,可能对请求传递处理效率有影响;
      • 如果节点对象存在循环引用时,会造成死循环,导致系统崩溃;

你可能感兴趣的:(java,设计模式,责任链模式)