设计模式_责任链模式
来源:互联网 发布:python smtp ssl 编辑:程序博客网 时间:2024/05/21 20:44
责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
类图:
实例:
我们创建抽象类 XLogger,带有详细的日志记录级别。然后我们创建三种类型的记录器,都扩展了 XLogger。每个记录器消息的级别是否属于自己的级别,如果是则相应地打印出来,否则将不打印并把消息传给下一个记录器。
完整可运行代码:
#ifndef _CHAIN_OF_RESPONSIBILITY_H_#define _CHAIN_OF_RESPONSIBILITY_H_#include<iostream>#include<string>using namespace std;/* * pattern : chain of responsibility * author : dijiang * mail : 1195878682@qq.com *///日志的级别enum LogLevel{ INFO=1, DEBUG, ERROR};//抽象的日志记录器class XLogger{public: virtual void doLog(LogLevel lv, string mes) = 0; void setNextHandler(XLogger* nextLogger) { mpNextLogger = nextLogger; }protected: XLogger* mpNextLogger; //LogLevel mLevel;};//info 日志记录器class InfoLogger : public XLogger{public: void doLog(LogLevel lv, string mes) override { if(INFO == lv) cout << "info: " << mes << endl; else { if(mpNextLogger) { cout << "info log pass it to next" << endl; mpNextLogger->doLog(lv,mes); } } }};//debug 日志记录器class DebugLogger : public XLogger{public: void doLog(LogLevel lv, string mes) override { if(DEBUG == lv) cout << "Debug: " << mes << endl; else { if(mpNextLogger) { cout << "debug logger pass it to next" << endl; mpNextLogger->doLog(lv,mes); } } }};//error 日志记录器class ErrorLogger : public XLogger{public: void doLog(LogLevel lv, string mes) override { if(ERROR == lv) cout << "Error: " << mes << endl; else { if(mpNextLogger) { cout << "Error logger pass it to next" << endl; mpNextLogger->doLog(lv,mes); } } }};#endifint main(){ XLogger* error = new ErrorLogger(); XLogger* debug = new DebugLogger(); XLogger* info = new InfoLogger(); //构建日志处理链 error->setNextHandler(debug); debug->setNextHandler(info); //从链头开始处理日志 error->doLog(INFO,"this is info"); cout << "-------------------------" << endl; error->doLog(DEBUG,"this is debug"); cout << "-------------------------" << endl; error->doLog(ERROR,"this is error"); return 0;}
运行结果:
阅读全文
1 0
- 大话设计模式_责任链模式
- 设计模式_责任链模式
- 设计模式_责任链模式
- 设计模式_责任链模式
- 设计模式_责任链模式
- JAVA设计模式_责任链模式
- 设计模式_责任链模式(20)
- Java设计模式_(行为型)_责任链模式
- 设计模式_责任链模式(Chain Of Responsibility)
- java设计模式14_责任链模式
- 责任链设计模式
- 责任链设计模式
- 设计模式---责任链
- 责任链设计模式
- 设计模式----责任链
- 设计模式-责任链
- 责任链设计模式
- 责任链设计模式
- 第三周学习
- hdu1312 Red and Black_广搜 dfs(java版本)
- 大数据的相关性和因果性
- 省队集训DAY3
- node连接mysql
- 设计模式_责任链模式
- Android获取屏幕宽度和高度
- Vue--router-->>项目多路由嵌套--常用
- 『ORACLE』数据泵Data Pump中impdp导入(11g)
- 纹理过滤函数glTexParameteri
- Fully Convolutional Networks for Semantic Segmentation
- Windows下使用GitPython
- 欧拉筛法(素数筛)
- Make(1)