【设计模式】责任链模式

简介:

一、什么是责任链模式

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

二、补充说明

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

应用例子: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,如需转载请自行联系原作者
相关文章
|
5月前
|
设计模式 Java
【设计模式系列笔记】责任链模式
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理它。每个处理者都有一个对下一个处理者的引用。责任链模式常用于处理请求的场景,例如在一个请求需要经过多个步骤或者多个对象来处理的情况下。
61 0
|
5月前
|
设计模式 Java
【设计模式】责任链模式
【设计模式】责任链模式
|
5月前
|
设计模式
【设计模式】责任链模式
【1月更文挑战第27天】【设计模式】责任链模式
|
12月前
|
设计模式 C++
设计模式之责任链模式(C++)
设计模式之责任链模式(C++)
|
7天前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
5月前
|
设计模式
设计模式之责任链模式
设计模式之责任链模式
|
4月前
|
设计模式 Java 中间件
深入探索Java设计模式:责任链模式解析与实践
深入探索Java设计模式:责任链模式解析与实践
47 0
|
4月前
|
设计模式 Java
Java设计模式之责任链模式详解
Java设计模式之责任链模式详解
|
4月前
|
设计模式 架构师 NoSQL
设计模式第六讲:责任链模式和迭代器模式详解
遍历任务交由迭代器完成,这简化了聚合类。  C. 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
162 0
|
5月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Chain of responsibility(责任链模式)
【设计模式】JAVA Design Patterns——Chain of responsibility(责任链模式)