微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

责任链模式

一、模式名

责任链模式, Chain of Responsibility

二、解决的问题

责任链模式,类似于“踢皮球”,在日常生活中,我们经常可以看到“踢皮球”现象,比如去政府办事,可能需要找几个部门,才能解决问题,因为他们都会告诉你,他们不负责这个事,需要找谁谁谁的,这种现象就是责任链模式。

责任链模式的优点是解耦请求方和处理方,能让请求方和处理方都成为灵活可扩展的组件。

三、解决方

责任链模式的UML图如下所示

clipboard

实例代码如下:

public class ChainOfResponsibilityExer {
    public static void main(String[] args) throws Exception {
        VerifyHandler nullHandler = new NullHandler("123");
        LengthHandler lengthHandler = new LengthHandler("122334");
        nullHandler.setNext(lengthHandler);
        nullHandler.execute();
    }
}
abstract class VerifyHandler {
    private VerifyHandler next;
    private String value;
    public VerifyHandler(String value) {
        this.value = value;
    }
    public String getValue() {
        return value;
    }
    public VerifyHandler setNext(VerifyHandler next) {
        this.next = next;
        return this.next;
    }
    public VerifyHandler getNext() {
        return next;
    }
    void execute() throws Exception {
        handle();
        if (next != null) {
            next.handle();
        }
    }
    abstract void handle() throws Exception;
}
class NullHandler extends VerifyHandler {
    public NullHandler(String val) {
        super(val);
    }
    
    @Override 
    void handle() throws Exception {
        if (getValue() == null) {
            throw new Exception("null");
        }
    }
}
class LengthHandler extends VerifyHandler {
    public LengthHandler(String val) {
        super(val);
    }
 
    @Override 
    void handle() throws Exception {
        if (getValue().length() > 5) {
            throw new Exception("too long");
        }
    }
}

常见使用场景:

1. 参数校验

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐