避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。

实例:
我们创建抽象类 AbstractLogger,带有详细的日志记录级别。然后我们创建三种类型的记录器,都扩展了 AbstractLogger。每个记录器消息的级别是否属于自己的级别,如果是则相应地打印出来,否则将不打印并把消息传给下一个记录器。

其实是通过构造类似链表结构的执行链条,在开发中如果有结构类似的if-else,可以通过这种结构进行简化。(比如log日志的这种设计就非常好)

代码:

public abstract class AbstractLogger {public static int INFO = 1;public static int DEBUG = 2;public static int ERROR = 3;protected int level;//责任链中的下一个元素protected AbstractLogger nextLogger;public void setNextLogger(AbstractLogger nextLogger){this.nextLogger = nextLogger;}public void logMessage(int level, String message){if(this.level <= level){write(message);}**调用下一个对象的方法**if(nextLogger !=null){nextLogger.logMessage(level, message);}}abstract protected void write(String message);}public class ConsoleLogger extends AbstractLogger {public ConsoleLogger(int level){this.level = level;}@Overrideprotected void write(String message) {    System.out.println("Standard Console::Logger: " + message);}
}**构造链条**private static AbstractLogger getChainOfLoggers(){AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);errorLogger.setNextLogger(fileLogger);fileLogger.setNextLogger(consoleLogger);return errorLogger;  }public static void main(String[] args) {AbstractLogger loggerChain = getChainOfLoggers();loggerChain.logMessage(AbstractLogger.INFO, "This is an information.");loggerChain.logMessage(AbstractLogger.DEBUG, "This is a debug level information.");loggerChain.logMessage(AbstractLogger.ERROR, "This is an error information.");}

设计模式18_责任链相关推荐

  1. 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)

    原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of ...

  2. php设计模式之责任链模式

    php设计模式之责任链模式 实际问题 你的论坛有举报功能,版主能解决粗口方面的举报,警察能解决严重一点的黄赌毒方面的举报,更严重的反政府的举报就需要由国安局来完成. 职场中每个人都有直属的上级,如果到 ...

  3. 轻松学习Java设计模式之责任链模式

    我们的态度是:每天进步一点点,理想终会被实现. 前言 设计模式,可能很多人都是看到代码知道怎么回事,但是离开代码再让其说出来,估计就有点含糊其词了,包括我自己在内.Android中其实用到的设计模式也 ...

  4. 手撸设计模式之-责任链模式

    手撸设计模式之-责任链模式 一 .责任链模式介绍 1.1 定义 1.2 责任链模式UML结构图 1.3 责任链模式结构详细 1.3 用例代码实现 二.责任链模式应用场景: 2.1 场景概述 2.2 场 ...

  5. 走穿java23种设计模式-15责任链模式详解

    走穿java23种设计模式-15责任链模式详解 责任链模式是一种常见的行为模式. 一.责任链模式的现实场景 习伟过生日邀请了很多朋友到KTV一起庆祝,为了增加欢乐的气氛,习伟建议大家一起玩击鼓传花的游 ...

  6. 软件设计模式之责任链模式实验

    软件设计模式之责任链模式实验 一.实验目的 掌握软件责任链模式中的命令模式,能够用责任链模式编写程序,解决实际问题. 二.实验内容与要求 内容:某小学老师指定班里的三位学生收寒假作业,三位学生分别负责 ...

  7. Java设计模式之责任链模式(二)

    所有设计模式传送门 本文将一起介绍学习下设计模式之责任链模式.责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有 ...

  8. Java设计模式作业-责任链模式

    Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...

  9. Java设计模式系列--责任链模式(应用)

    原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java设计模式中的责任链模式的一些使用场景. 责任链模式的好处 符合单一职责原则 每个功能 ...

最新文章

  1. PHP的转义函数 htmlspecialchars、strip_tags、addslashes解释
  2. windows phone (23) ScrollViewer元素
  3. JavaScript ES2021 最值得期待的 5 个新特性解析
  4. 转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
  5. 复制中含有非法字符导致的错误
  6. 【codevs3732】【BZOJ3751】解方程,hash+秦九韶算法
  7. java里面的string类型,java中的String类型(不知道理解的好不,请教大神)
  8. matlab 加上划线,latex 上划线
  9. 谷歌admob测试设备测试流程
  10. 深度沉浸能力的锻炼方法
  11. java国际化之时区问题处理
  12. 服务器地址和客户端地址详解与区别
  13. 第二届“马栏山”杯国际音视频算法大赛高分攻略
  14. 半导体通讯标准EAP、SECS/GEM视频介绍
  15. 一种求周期二元线性序列的极小多项式的方法
  16. .DS_Store 文件是什么?
  17. win7怎么进网络连接服务器未响应,win7 怎么远程连接服务器未响应
  18. 【MATLAB】Matlab输入输出格式及矩阵运算
  19. 《黑马程序员》 初识黑马
  20. ArcGIS for Desktop安装及授权常见问题解答

热门文章

  1. ubuntu安装atom
  2. Ubuntu配置教程
  3. 如何在github上下载某个项目的单独某个目录
  4. 实验十一 团队作业7:团队项目设计完善编码
  5. 微信授权,重定向两次
  6. 扭曲效果 效率优化 GrapPass,CommandBuffer对比
  7. struts2权威指南学习笔记:struts2引入自定义库
  8. java变量,初始化快,构造函数的执行顺序
  9. [.NET] 在Windows系统中搭建基于.NET的iPhone应用程序虚机开发环境
  10. TeeChart.Pro.v7.06在BDS2006中的安装(For Win32)