设计模式18_责任链
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
实例:
我们创建抽象类 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_责任链相关推荐
- 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)
原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of ...
- php设计模式之责任链模式
php设计模式之责任链模式 实际问题 你的论坛有举报功能,版主能解决粗口方面的举报,警察能解决严重一点的黄赌毒方面的举报,更严重的反政府的举报就需要由国安局来完成. 职场中每个人都有直属的上级,如果到 ...
- 轻松学习Java设计模式之责任链模式
我们的态度是:每天进步一点点,理想终会被实现. 前言 设计模式,可能很多人都是看到代码知道怎么回事,但是离开代码再让其说出来,估计就有点含糊其词了,包括我自己在内.Android中其实用到的设计模式也 ...
- 手撸设计模式之-责任链模式
手撸设计模式之-责任链模式 一 .责任链模式介绍 1.1 定义 1.2 责任链模式UML结构图 1.3 责任链模式结构详细 1.3 用例代码实现 二.责任链模式应用场景: 2.1 场景概述 2.2 场 ...
- 走穿java23种设计模式-15责任链模式详解
走穿java23种设计模式-15责任链模式详解 责任链模式是一种常见的行为模式. 一.责任链模式的现实场景 习伟过生日邀请了很多朋友到KTV一起庆祝,为了增加欢乐的气氛,习伟建议大家一起玩击鼓传花的游 ...
- 软件设计模式之责任链模式实验
软件设计模式之责任链模式实验 一.实验目的 掌握软件责任链模式中的命令模式,能够用责任链模式编写程序,解决实际问题. 二.实验内容与要求 内容:某小学老师指定班里的三位学生收寒假作业,三位学生分别负责 ...
- Java设计模式之责任链模式(二)
所有设计模式传送门 本文将一起介绍学习下设计模式之责任链模式.责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有 ...
- Java设计模式作业-责任链模式
Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...
- Java设计模式系列--责任链模式(应用)
原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java设计模式中的责任链模式的一些使用场景. 责任链模式的好处 符合单一职责原则 每个功能 ...
最新文章
- PHP的转义函数 htmlspecialchars、strip_tags、addslashes解释
- windows phone (23) ScrollViewer元素
- JavaScript ES2021 最值得期待的 5 个新特性解析
- 转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
- 复制中含有非法字符导致的错误
- 【codevs3732】【BZOJ3751】解方程,hash+秦九韶算法
- java里面的string类型,java中的String类型(不知道理解的好不,请教大神)
- matlab 加上划线,latex 上划线
- 谷歌admob测试设备测试流程
- 深度沉浸能力的锻炼方法
- java国际化之时区问题处理
- 服务器地址和客户端地址详解与区别
- 第二届“马栏山”杯国际音视频算法大赛高分攻略
- 半导体通讯标准EAP、SECS/GEM视频介绍
- 一种求周期二元线性序列的极小多项式的方法
- .DS_Store 文件是什么?
- win7怎么进网络连接服务器未响应,win7 怎么远程连接服务器未响应
- 【MATLAB】Matlab输入输出格式及矩阵运算
- 《黑马程序员》 初识黑马
- ArcGIS for Desktop安装及授权常见问题解答
热门文章
- ubuntu安装atom
- Ubuntu配置教程
- 如何在github上下载某个项目的单独某个目录
- 实验十一 团队作业7:团队项目设计完善编码
- 微信授权,重定向两次
- 扭曲效果 效率优化 GrapPass,CommandBuffer对比
- struts2权威指南学习笔记:struts2引入自定义库
- java变量,初始化快,构造函数的执行顺序
- [.NET] 在Windows系统中搭建基于.NET的iPhone应用程序虚机开发环境
- TeeChart.Pro.v7.06在BDS2006中的安装(For Win32)