设计模式18——Chain of Responsibility设计模式

本文介绍了责任链设计模式的基本概念及其实现原理,并通过一个处理数字、字母和特殊符号的具体实例来展示该模式的应用方式。此外,还列举了Java中责任链设计模式的两个实际应用场景。

Chain of Responsibility(CoR)责任链设计模式是用一系列请求处理器试图处理一个请求,这些请求处理器之间是一个松耦合,唯一的共同点是在他们之间传递请求。例如客户端发送一个请求,请求处理器A先处理,如果A没有处理或者无法处理,就将请求传递给请求处理器B,如果B没有处理或者无法处理,将将请求传递到请求处理器C去处理,所有这些请求处理器构成一条请求处理责任链。Chain of Responsibility责任链设计模式的结构如下:

Chain of Responsibility责任链设计模式的时序图如下:

一个处理数字、字母和特殊符合的例子演示Chain of Responsibility,代码如下:

//抽象请求处理器

abstract class Handler{

    private Handler sccessor;

    public Handler(Handler successor){

         this.successor = sucessor;

    }

   public Handler getSuccessor(){

        return successor;

   }

   public void handRequest(Request request);

}

//Request请求类

class Request{

    private String type;

    public Request(String type){

        this.type = type;

    }

  public String getType(){

        return type;

  }

}

//数字请求处理器

class NumberHandler extends Handler{

     public NumberHander(){

      }

     public NumberHandler(Handler successor){

         super(successor);

     }

   public void handRequest(Request request){

          if(request.getType().equals("Number")){

                 System.out.println("Number has been handled");

          }

    //传递到下一个请求处理器处理

    else{

         getSuccessor().handRequest(request);

    }

}

}

//字母请求处理器

   class CharacterHandler extends Handler{

        public CharacterHandler(){

       }

       public CharacterHandler(Handler successor){

           super(successor);

       }

      public void handRequest(Request request){

             if(request.getType().equals("Character")){

                 System.out.println("Character has been handled");

              }

           //传递到下一个请求处理器处理

          else{

             getSuccessor().handRequest(request);

          }

    }

}

//特殊符号请求处理器

class SymbolHandler extends Handler{

        public SymbolHandler(){

         }

        public SymbolHandler(Handler successor){

          super(successor);

        }

    public void handRequest(Request request){

           if(request.getType().equals("Symbol")){

               System.out.println("Symbol has been handled");

           }

         //传递到下一个请求处理器处理

         else{

            getSuccessor().handRequest(request);

         }

    }

}

public class Application{

       public static void main(String[] args){

             Handler numberHandler = new NumberHandler();

             Handler characterHandler = new CharacterHandler();

             Handler symbolHandler = new SymbolHandler();

             numberHandler.setSuccessor(characterHandler);

             characterHandler.setSuccessor(symbolHandler);

             Request request1 = new Request("Number");

             Request request2 = new Request("Character");

             Request request3 = new Request("Symbol");

             numberHandler.handRequest(request1);

             numberHandler.handRequest(request2);

             numberHandler.handRequest(request3);

      }

}

java中Chain of Responsibility的两个应用例子:

(1)java的异常处理机制,当出现中发生异常时,try-catch会比较所捕捉的异常是否符合异常类型,如果符合就执行所设定的处理,如果都没有比对到适当的异常,剧会将异常丢出try-catch区块之外。

(2)Struts1.x中的filter过滤器链,Struts2.x中拦截器链等等,将HTTP请求处理中的字符编码转换,加密/解密等常用功能分别作为一个个的请求处理器,接收到客户端请求时对其进行处理,同时在客户端返回服务端响应时也使用这些处理器进行处理。

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值