博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Behavioral Patterns Part 1/11: Chain Of Responsibility Pattern
阅读量:4312 次
发布时间:2019-06-06

本文共 3224 字,大约阅读时间需要 10 分钟。

Behavioral Patterns Part 1/11: Chain Of Responsibility Pattern

目录


Definition

通过给每一个receiver有机会来接收request的方式避免了request的sender和receiver之间的耦合。

把接收对象链(chain)起来,然后沿着chain传递request,直到有对象处理它。

A method called in one class will move up a class hierarchy until a method is found that can properly handle the call.

何时使用?希望解耦sender和receiver,也就是request发送不用指定具体的receiver。

使用频率:Frequency of use Medium Low


UML Class Diagram

COR Pattern


Implementation

这里考虑一个日志(Logger)的应用——

级别高的信息要在所有比此级别低的Logger中显示。

// AbstractLogger.javapackage designpatterns.behavioralpatterns.cor;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);}// SpecificLogger.javapackage designpatterns.behavioralpatterns.cor;class InfoLogger extends AbstractLogger { public InfoLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Info Console::Logger: " + message); }}class ErrorLogger extends AbstractLogger { public ErrorLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Error Console::Logger: " + message); }}class DebugLogger extends AbstractLogger { public DebugLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Debug Console::Logger: " + message); }}// CORDemo.javapackage designpatterns.behavioralpatterns.cor;public class CORDemo {
private static AbstractLogger getChainOfLoggers() { AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR); AbstractLogger debugLogger = new DebugLogger(AbstractLogger.DEBUG); AbstractLogger infoLogger = new InfoLogger(AbstractLogger.INFO); errorLogger.setNextLogger(debugLogger); debugLogger.setNextLogger(infoLogger); return errorLogger; } public static void main(String[] args) { AbstractLogger loggerChain = getChainOfLoggers(); loggerChain.logMessage(AbstractLogger.INFO, "This is an information."); System.out.println("================="); loggerChain.logMessage(AbstractLogger.DEBUG, "This is a debug level information."); System.out.println("================="); loggerChain.logMessage(AbstractLogger.ERROR, "This is an error information."); }}// outputInfo Console::Logger: This is an information.=================Debug Console::Logger: This is a debug level information.Info Console::Logger: This is a debug level information.=================Error Console::Logger: This is an error information.Debug Console::Logger: This is an error information.Info Console::Logger: This is an error information.

转载于:https://www.cnblogs.com/1202zhyl/p/5726849.html

你可能感兴趣的文章
AC自动机模板
查看>>
python 基本语法
查看>>
Swift - 点击箭头旋转
查看>>
git配置
查看>>
【hexo】01安装
查看>>
CI框架源码学习笔记2——Common.php
查看>>
005---书籍添加和编辑的提交数据
查看>>
使用case语句给字体改变颜色
查看>>
JAVA基础-多线程
查看>>
面试题5:字符串替换空格
查看>>
JSP九大内置对象及四个作用域
查看>>
ConnectionString 属性尚未初始化
查看>>
数据结构-栈 C和C++的实现
查看>>
发布功能完成
查看>>
MySQL基本命令和常用数据库对象
查看>>
poj 1222 EXTENDED LIGHTS OUT(位运算+枚举)
查看>>
秘密:之所以不搞军事同盟,俄罗斯
查看>>
进程和线程概念及原理
查看>>
Lucene、ES好文章
查看>>
后视镜应该这样用!能帮避免80%的车祸!
查看>>