07.责任链模式

责任链模式

1. 是什么

在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

经典案例像Tomcat的filterChain。

2.有什么用

发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

3.怎么用
  • 通用类图


    07.责任链模式_第1张图片
    chainResponsity.PNG
  • 示例代码
    示例为一个bug处理者的责任链,不同层级的开发者对应不同等级的bug。

  • Handler接口

public abstract class BugHandler {
    // 后继责任者
    private BugHandler successor;

    abstract void handle(int bugLevel);

    /**
     * @return the successor
     */
    public BugHandler getSuccessor() {
        return successor;
    }

    /**
     * @param successor
     *            the successor to set
     */
    public void setSuccessor(BugHandler successor) {
        this.successor = successor;
    }

}
  • Handler接口实现类Developer
public class Developer extends BugHandler {

    @Override
    void handle(int bugLevel) {
        if (bugLevel <= 10) {
            System.out.println("developer's responsibility!");

        } else {
            if (this.getSuccessor() != null) {
                this.getSuccessor().handle(bugLevel);
            }
        }

    }

}

  • Handler接口实现类TeamLeader
public class TeamLeader extends BugHandler {

    @Override
    void handle(int bugLevel) {
        if (bugLevel > 10 && bugLevel <= 20) {
            System.out.println("TeamLeader's responsibility!");

        } else {
            if (this.getSuccessor() != null) {
                this.getSuccessor().handle(bugLevel);
            }
        }

    }

}

  • Handler接口实现类ProjectManager
public class ProjectManager extends BugHandler {

    @Override
    void handle(int bugLevel) {
        if (bugLevel > 20) {
            System.out.println("ProjectManager's responsibility!");

        } else {
            if (this.getSuccessor() != null) {
                this.getSuccessor().handle(bugLevel);
            }
        }

    }

}
  • Client类
public class Client {

    public static void main(String[] args) {
        int bugLevel = 17;
        BugHandler bugHandler = new Developer();
        BugHandler tl = new TeamLeader();
        BugHandler pm = new ProjectManager();
        tl.setSuccessor(pm);
        bugHandler.setSuccessor(tl);
        bugHandler.handle(bugLevel);

    }

}

你可能感兴趣的:(07.责任链模式)