• 设计模式--责任链模式


    设计模式--责任链模式

    1 概述


    1.1 定义
    责任链模式(Chain of Responsibility Design)使多个对象都有机会处理请求,从而避免了请求的发送者与接受者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有对象处理它为止。
    责任链模式把处理者与被处理者分隔开,彼此都不知道其具体的实现,实现了处理者与被处理者间的解耦。
    1.2 应用
    Java Web中的Filter就是责任链变现形式,只是稍微变形了一下。
    Java中的异常处理就很像这种思想:抛出异常-->处理异常/向上抛异常-->处理异常/向上抛异常-->....直到处理该异常或者抛给console。
    1.3 类图
    enter description here

    责任链模式涉及的角色如下:

    • Handler处理者抽象角色:定义处理者的基本方法:处理方法、设置下一个处理者方法等
    • Handler处理者具体角色:具体的处理者

    2 详解

     1 public abstract class Handler {
     2     // 下一个处理者
     3     private Handler nextHandler;
     4 
     5     // 每个处理者对请求做出处理
     6     public final void handle(String str) {
     7         // 根据条件判断是否由自己处理
     8         if(condition) {
     9             concreteHandle(str);
    10         }
    11         // 不属于自己处理,交由下一个处理者处理
    12         if(nextHandler != null) {
    13             nextHandler.handle(str);
    14         } else {
    15             return;
    16         }
    17     }
    18     
    19     // 设置下一个处理者
    20     public void setNext(Handler handler) {
    21         this.nextHandler = handler;
    22     }
    23 
    24     // 具体的处理
    25     public abstract void concreteHandle(String str);
    26 }
    27 
    28 public class ConcreteHandler1 extends Handler {
    29     @Override
    30     public void concreteHandle(String str) {
    31         System.out.println("ConcreteHandler1 handle " + str);
    32     }
    33 }
    34 
    35 public class ConcreteHandler2 extends Handler {
    36     @Override
    37     public void concreteHandle(String str) {
    38         System.out.println("ConcreteHandle handle " + str);
    39     }
    40 }
    41 
    42 public class Client {
    43     public static void main(String[] args) {
    44         // 声明所有处理者
    45         Handler handler1 = new ConcreteHandler1();
    46         Handler handler2 = new ConcreteHandler2();
    47         // 设置处理链顺序
    48         handler1.setNext(handler2);
    49         // 处理
    50         handler1.handle("hello");
    51     }
    52 }
  • 相关阅读:
    应用系统数据缓存设计
    解密SVM系列(二):SVM的理论基础(转载)
    机器学习6—SVM学习笔记
    机器学习5—logistic回归学习笔记
    Win7 64bit+Anaconda(3-5.0.1,Python3.6)+Pycharm(community-2017.3.3)+OpenCV(python‑3.4.0‑cp36‑cp36m)(转载)
    AI关注的网址
    机器学习4—朴素贝叶斯学习笔记
    机器学习3—决策树学习笔记
    机器学习2—K近邻算法学习笔记
    windows_64下python下载安装Numpy、Scipy、matplotlib模块
  • 原文地址:https://www.cnblogs.com/maying3010/p/6662243.html
Copyright © 2020-2023  润新知