行为型 责任链模式(过滤器模式)

简介: 行为型 责任链模式(过滤器模式)

责任链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

责任链模式

概要分析:

一个请求,需要经过一些列的对象进行操作时使用。

在实现时,要注意指定好下一个执行者,直到最终所有执行完才算结束。

如:请假条需要组长,部门领导,公司领导依次审批才有效。

注意:过滤器与责任链实现类似,只是在链上找到有一个处理就处理,否则就处理失败。

源码Demo:

/****************************************************************************************************
链式
  概念(使用一个单链表,尾结点指向空,然后挨个遍历此结点指向的函数(这些函数都来自与抽象类中函数的重写)
  将则责任链上的对象统统创建出来,然后执行到哪个对象,哪个对象就去调用这个重写的函数方法)
适用于:
  链条式处理事情。工作流程化、消息处理流程化、事物流程化;
****************************************************************************************************/
#include <iostream>
using namespace std;
class CarHandle//责任链,设计一个类将其创建成链
{
public:
  virtual void HandleCar() = 0;
public:
  CarHandle *setNextHandle(CarHandle *carhandle)
  {
    this->carhandle = carhandle;
    return this->carhandle;
  }
protected:
  CarHandle *carhandle;
};
class CarHandleHead : public CarHandle
{
public:
  virtual void HandleCar()
  {
    cout << "车头处理" << endl;
    if (this->carhandle != NULL){  
      carhandle->HandleCar();  
    }
  }
};
class CarHandleBody : public CarHandle
{
public:
  virtual void HandleCar()
  {
    cout << "车身处理" << endl;
    if (this->carhandle != NULL){  
      carhandle->HandleCar();  
    }
  }
};
class CarHandleTail : public CarHandle
{
public:
  virtual void HandleCar()
  {
    cout << "车尾处理" << endl;
    if (this->carhandle != NULL){  
      carhandle->HandleCar(); 
    }
  }
};
class CarHandleyou : public CarHandle
{
public:
  virtual void HandleCar()
  {
    cout << "handle you success" << endl;
    if (this->carhandle != NULL)
    {
      carhandle->HandleCar();
    }
  }
};
int main()
{
  CarHandleHead *head = new CarHandleHead;
  CarHandleBody *body = new CarHandleBody;
  CarHandleTail *tail = new CarHandleTail; //这里是创建一些列的对象,对象包含下一个结点的指针
  CarHandleyou  *you = new CarHandleyou;
  head->setNextHandle(body);//在这里将这些函数使用链表串起来
  body->setNextHandle(tail);
  tail->setNextHandle(you);
  you->setNextHandle(NULL);
  //处理
  head->HandleCar();
  delete head;
  delete body;
  delete tail;
  delete you;
  // system("pause");
  return 0;
}
目录
相关文章
|
8月前
|
设计模式 Java
Java设计模式【八】:过滤器模式
Java设计模式【八】:过滤器模式
51 0
|
7月前
|
设计模式 算法 数据处理
|
设计模式 Java
过滤器模式【Java设计模式】
过滤器模式【Java设计模式】
65 0
|
设计模式
设计模式-职责链+反射
设计模式-职责链+反射
57 0
|
数据采集 JSON 监控
你还不知道责任链模式的使用场景吗?
你还不知道责任链模式的使用场景吗?
|
设计模式
23种设计模式-关系模式-责任链模式(十七)
23种设计模式-关系模式-责任链模式(十七)
23种设计模式-关系模式-责任链模式(十七)
|
设计模式
设计模式-3-过滤器模式
过滤器模式(Filter Pattern)或者叫标准模式(Criteria Pattern),就是在全部对象中过滤出我们所定义的标准对应的对象,也属于结构型模式。
138 0
|
设计模式 前端开发
利用责任链模式设计一个拦截器(下)
近期在做 Cicada 的拦截器功能,正好用到了责任链模式。 这个设计模式在日常使用中频率还是挺高的,借此机会来分析分析。
|
设计模式
利用责任链模式设计一个拦截器(上)
近期在做 Cicada 的拦截器功能,正好用到了责任链模式。 这个设计模式在日常使用中频率还是挺高的,借此机会来分析分析。
|
uml
策略模式和责任链模式(4)
策略模式和责任链模式(4)
270 0
策略模式和责任链模式(4)