【设计模式】责任链模式

简介:

一、什么是责任链模式

为请求创建了一个接收者对象的链,每个接收者都包含对另一个接收者的引用,当某个接受者不能处理该请求时,会将该请求转给下一个接受者处理;

二、补充说明

请求发送者与请求接受者解耦

应用例子:struts的拦截器,servlet的过滤器

三、角色

抽象请求处理者

具体请求处理者:包含下一个具体请求处理者的引用

客户端:请求发送者

四、例子,JAVA实现

说明:模拟一个村、镇、县的责任链关系请求

抽象处理者

复制代码
package com.pichen.dp.behavioralpattern.chain;

public abstract class Handler {

    protected Handler next;

    public abstract void handleRequest(String value);

    public Handler next() {
        return this.next;
    }

    public void setNext(Handler next) {
        this.next = next;
    }
}
复制代码

具体村、镇、县处理者

复制代码
package com.pichen.dp.behavioralpattern.chain;

public class VillageHandler extends Handler {

    /**
     * @see com.pichen.dp.behavioralpattern.chain.Handler#handleRequest()
     */
    @Override
    public void handleRequest(String value) {
        if ("village".equals(value)) {
            System.out.println("VillageHandler: handled~");
        } else {
            System.out.println("VillageHandler: pass~");
            this.next.handleRequest(value);
        }
    }

}
复制代码
复制代码
package com.pichen.dp.behavioralpattern.chain;

public class TownHandler extends Handler {

    @Override
    public void handleRequest(String value) {
        if ("town".equals(value)) {
            System.out.println("VillageHandler: handled~");
        } else {
            System.out.println("Town: pass~");
            this.next.handleRequest(value);
        }
    }
}
复制代码
复制代码
package com.pichen.dp.behavioralpattern.chain;

public class CountyHandler extends Handler {

    @Override
    public void handleRequest(String value) {
        if ("county".equals(value)) {
            System.out.println("County: handled~");
        } else if (this.next == null) {
            System.out
                    .println("no next Handler, this request can not be handle~");
        } else {
            System.out.println("County: pass~");
            this.next.handleRequest(value);
        }
    }
}
复制代码

客户端:

复制代码
package com.pichen.dp.behavioralpattern.chain;

public class Main {

    public static void main(String[] args) {
        Handler villageHandler = new VillageHandler();
        Handler townHandler = new TownHandler();
        Handler countyHandler = new CountyHandler();
        
        villageHandler.setNext(townHandler);
        townHandler.setNext(countyHandler);
        
        System.out.println("test county request:");
        villageHandler.handleRequest("county");
        
        System.out.println("\ntest city request:");
        villageHandler.handleRequest("city");
    }
}
复制代码

结果:

复制代码
test county request:
VillageHandler: pass~
Town: pass~
County: handled~

test city request:
VillageHandler: pass~
Town: pass~
no next Handler, this request can not be handle~
复制代码

 

本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/5217038.html,如需转载请自行联系原作者
相关文章
|
1月前
|
设计模式 Java
【设计模式】责任链模式
【设计模式】责任链模式
|
3月前
|
设计模式
【设计模式】责任链模式
【1月更文挑战第27天】【设计模式】责任链模式
|
3月前
|
设计模式 Dubbo Java
聊聊Java设计模式-责任链模式
责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
82 1
聊聊Java设计模式-责任链模式
|
6月前
|
设计模式 C++
设计模式之责任链模式(C++)
设计模式之责任链模式(C++)
|
3月前
|
设计模式
设计模式之责任链模式
设计模式之责任链模式
|
15天前
|
设计模式 PHP
php设计模式--责任链模式(五)
php设计模式--责任链模式(五)
13 0
|
2月前
|
设计模式 Java 测试技术
浅谈设计模式 - 责任链模式(十四)
浅谈设计模式 - 责任链模式(十四)
51 0
|
3月前
|
设计模式 SQL Java
设计模式-责任链模式
设计模式-责任链模式
50 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——11责任链模式
Golang设计模式——11责任链模式
19 0
Golang设计模式——11责任链模式
|
3月前
|
设计模式 前端开发
【设计模式】之责任链模式
职责链模式是一种非常有用的设计模式,在前端开发中经常用于处理复杂的请求流程和数据验证。它通过将请求发送者和接收者解耦,并将请求沿着一个链条依次传递下去,实现了优雅地处理请求流程。通过使用职责链模式,我们可以提高代码的可维护性和可扩展性。然而,在应用职责链模式时需要权衡其带来的优缺点,并根据具体情况进行选择。
44 0