关闭

设计模式_责任链模式

标签: 责任链模式设计模式c++新手完整可运行代码
169人阅读 评论(0) 收藏 举报
分类:

责任链模式

顾名思义,责任链模式(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);
            }
        }
    }
};
#endif

int 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
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

简述:     前端时间再看一些类库的源码,发现责任链模式的强大之处,尤其是和建造者模式的结合后强大的动态可扩展性更是牛逼的一塌糊涂。接下来赶紧了解一下吧!     我们先来了解一下什么是责任...
  • u012810020
  • u012810020
  • 2017-05-05 12:50
  • 425

设计模式---责任链模式(C++实现)

责任链模式(Chain of Responsibility Pattern)为请求创建一个接受者对象的链。这种模式给与请求的类型,对请求的发送者和接受者进行解耦。属于行为型模式。 在这种模式...
  • My_heart_
  • My_heart_
  • 2017-03-16 15:48
  • 528

大话设计模式—责任链模式

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为...
  • lmb55
  • lmb55
  • 2016-04-04 00:03
  • 1045

Tomcat中的设计模式--责任链模式

责任链模式 Tomcat 中一个最容易发现的设计模式就是责任链模式,这个设计模式也是 Tomcat 中 Container 设计的基础,整个容器的就是通过一个链连接在一起,这个链一直将请求正确的...
  • ZuoAnYinXiang
  • ZuoAnYinXiang
  • 2016-01-04 18:29
  • 716

Java设计模式之责任链模式、职责链模式

继续介绍23种设计模式系列,本文介绍的是职责链模式。
  • jason0539
  • jason0539
  • 2015-04-18 07:41
  • 23828

浅谈php设计模式之责任链模式

责任链模式原理:坦白来讲就是说按照不同的等级去处理事情,如果自己处理不了就交给上级去处理。这种处理方式叫做责任链模式。应用场景:OA管理系统中请假。论坛举报。 脏话 ...
  • baidu_28678737
  • baidu_28678737
  • 2016-03-16 00:04
  • 528

python设计模式之责任链模式

责任链模式比如我们还在读书的时候,考试的分数都是几个档次,比如90-100分,80-90分,好吧我想做一个根据分数打印你的学习成绩的反馈, 比如90-100就是A+,80-90就是A,70-80就是B...
  • leongongye
  • leongongye
  • 2015-07-29 18:10
  • 557

c++设计模式之(状态模式和责任链模式)的实现

c++的设计模式系列分为以下几种: //按照目的来分,有:  (1)创建型模式:处理对象的创建过程 (2)结构型模式:处理类或者对象的组合 (3)行为型模式:对怎样交互和分...
  • Strong_HCyouth
  • Strong_HCyouth
  • 2016-11-30 15:40
  • 472

五分钟一个设计模式之责任链模式

五分钟一个设计模式,用最简单的方法来描述设计模式。查看更多设计模式,请点击五分钟一个设计模式系列 http://blog.csdn.net/daguanjia11/article/category/...
  • daguanjia11
  • daguanjia11
  • 2015-06-08 07:22
  • 2603

23种设计模式之——责任链模式(okhttp 拦截器)

前言网络七层协议在现实中的责任链模型之一就是网络连接.对与程序猿而言,七层或五层的网络连接模型是肯定知道的. 当一个网络请求发出时,需要经过应用层->传输层->网络层->连接层->物理层 收到响应...
  • o279642707
  • o279642707
  • 2017-02-15 19:41
  • 1164
    个人资料
    • 访问:10125次
    • 积分:441
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:3篇
    • 译文:0篇
    • 评论:6条
    最新评论