zoukankan      html  css  js  c++  java
  • 设计模式(十九)------23种设计模式(11):责任链模式

    使用频率:★★★☆☆

    一、什么是责任链模式

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

    二、补充说明

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

    应用例子: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("
    test 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~
    复制代码

    @Author      风一样的码农
    @HomePageUrl http://www.cnblogs.com/chenpi/ 
    @Copyright      转载请注明出处,谢谢~ 
  • 相关阅读:
    shellscript 02 find & xargs
    PL/SQL exception
    PL/SQL 游标
    Eclipse
    【数据存储】操作资源文件
    【AsynTask】Android异步加载一张图品
    【数据存储】利用IO流操作文件
    【数据存储】DOM操作
    【特效】手指滑动:水波纹
    【数据存储】SAX操作
  • 原文地址:https://www.cnblogs.com/chz-blogs/p/9380968.html
Copyright © 2011-2022 走看看