栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++设计模式之职责链模式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++设计模式之职责链模式

职责链模式

职责链模式是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之前的耦合关系。在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这条链上传递,直到链上的某一个对象决定处理此请求。

在公司中不同的岗位拥有不同的职责与权限。以上述的请假流程为例,当X请一天假的时候,只要组长审批就可以了,不需要流转到主管和总监。如果职责链上的某个环节无法处理当前的请求,若含有下个环节,则会把请求转交给下个环节来处理。

职责链上的处理负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,所有职责链将请求的发送者和请求的处理者解耦了。

在日常的软件开发过程中,对于职责链来说,一种常见的应用的场景是中间件,下面我们来看一下如何利用职责链处理请求。

#include 

using namespace std;

eenum RequestLevel {
  Level_One = 0,
  Level_Two,
  Level_Three,
  Level_Num
};

//抽象处理者(Handler)角色,提供职责链的统一接口
class Leader {
  public:
  	Leader(Leader* leader):m_leader(leader){}
  	virtual ~Leader(){}
  	virtual void handleRequest(RequestLevel level) = 0;
  protected:
  	Leader* m_leader;
};

//具体处理者(Concrete Handler)角色
class Montior:public Leader //链扣1
{
  public:
  	Monitor(Leader *leader):Leader(leader){}
  	void handleRequest(RequestLevel level) {
      if(level < level_Two) {
        cout << "Mointor handle request : " << level << endl;
      }
      else {
        m_leader->handleRequest(level);
      }
    }
  
};

//具体处理者(Concrete Handler)角色
class Captain:public Leader //
{
  public:
  	Captain(Leader* leader):leader(leader){}
  	void hanleRequest(RequestLevel level) {
      if (level < Level_Three) {
        cout << "Captain handle request : " << level << endl;
      }
      else {
        m_leader->handleRequest(level);
      }
    }
};

//具体处理者(Concrete Handle)角色
class General:public Leader  { //链扣3
  public:
		General(Leader* leader):Leader(leader){}
		void handleRequest(RequestLevel level) {
      cout << "General handle request : " << level << endl;
    }
};

int main() {
  Leader* general = new General(nullptr);
  Leader* captain = new Captain(general);
  Leader* monitor = new Monitor(captain);
  monti->handleRequest(Level_One);
  
  delete monitor;
  monitor = nullptr;
  delete captain;
  captain = nullptr;
  delete general;
  general = nullptr;
  return 0;
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号