zoukankan      html  css  js  c++  java
  • 责任链模式--行为模式

    适用场景如下:

    springmvc中的拦截器就用了责任链模式

    UML图如下:

    其中最为关键位handle类

    代码如下:

    public abstract class Handle {

    protected String name;

    protected Handle nextHandle;

    public void setName(String name) {
    this.name = name;
    }

    public void setNextHandle(Handle nextHandle) {
    this.nextHandle = nextHandle;
    }

    protected abstract void hand(HandRequest request);

    protected abstract boolean isHand(HandRequest request);

    protected void handFun(HandRequest request){
    if(this.isHand(request)){
    this.hand(request);
    }else {
    System.out.println(this.name+"处理不了,让"+nextHandle.name+"处理");
    nextHandle.handFun(request);
    }
    }
    }

    AHandle类

    public class AHandle extends Handle {
    
        @Override
        protected void hand(HandRequest request) {
            System.out.println("我是A,正在处理:"+request.getDay());
        }
    
        @Override
        protected boolean isHand(HandRequest request) {
            if(request.getDay()>10){
                return false;
            }
            return true;
        }
    }

    Client类调用

    public static void main(String[] args) {
    Handle aHandle = new AHandle();
    aHandle.setName("a");
    Handle bHandle = new BHandle();
    bHandle.setName("b");
    Handle cHandle = new CHandle();
    cHandle.setName("c");

    //构件责任链
    aHandle.setNextHandle(bHandle);
    bHandle.setNextHandle(cHandle);

    //处理A
    HandRequest handRequestA = new HandRequest(1);
    aHandle.handFun(handRequestA);

    System.out.println("=========================");

    //处理B
    HandRequest handRequestB = new HandRequest(11);
    aHandle.handFun(handRequestB);

    System.out.println("=========================");
    //处理C
    HandRequest handRequestC = new HandRequest(111);
    aHandle.handFun(handRequestC);

    结果效果如下:

    欢迎关注我的公众号:“进阶者euj”
  • 相关阅读:
    How to install tcpping on Linux.md
    当前服务器的并发连接数查看
    Windows 系统下安装 dig 命令
    paping使用来测试联通&网站由于tcp协议导致的无法通信问题超时问题
    SSH反向连接及Autossh
    设置Windows Azure Linux虚拟机中的root账户
    用UltraISO制作CentOS U盘安装盘
    CentOS7 修改网卡名称为eth0
    iOS开发--绘图教程
    ios开发--网页中调用JS与JS注入
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/8909111.html
Copyright © 2011-2022 走看看