设为首页 加入收藏

TOP

C++设计模式实现--职责链模式(一)
2014-07-19 23:03:50 来源: 作者: 【 】 浏览:155
Tags:设计模式 实现 职责 模式

  一. 概述

  职责链模式:

  使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

  二. 举个例子

  员工要求加薪

  公司的管理者一共有三级:总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求。

  结构图如下:

  假设:

  经理可以处理薪水的范围在:0~500

  总监可以处理薪水的范围在:500~1000

  总经理可以处理薪水的范围在:1000~2000

  则代码如下:

  [cpp] view plaincopy//////////////////////////////////////////////////////////////////////////

  //抽象处理类

  class Handle

  {

  public:

  virtual ~Handle()

  {

  delete _succ;

  }

  virtual void HandleRequest(int request) = 0;

  //设置其上级

  void SetSuccessor(Handle* succ)

  {

  _succ = succ;

  }

  Handle* GetSuccessor()

  {

  return _succ;

  }

  protected:

  Handle()

  {

  _succ = NULL;

  }

  private:

  Handle* _succ;

  };

  //具体处理类 A

  class ConcreteHandleA: public Handle

  {

  public:

  void HandleRequest(int request)

  {

  if (request >= 0 && request < 500)

  {

  cout << "ConcreteHandleA deal with: " << request <

  }

  else if (this->GetSuccessor() != NULL)

  {

  this->GetSuccessor()->HandleRequest(request);

  }

  else

  {

  cout << "Can't deal with " << request << endl;

  }

  }

  };

  //具体处理类 B

  class ConcreteHandleB: public Handle

  {

  public:

  void HandleRequest(int request)

  {

  if (request >= 500 && request < 1000)

  {

  cout << "ConcreteHandleB deal with: " << request <

  }

  else if (this->GetSuccessor() != NULL)

  {

  this->GetSuccessor()->HandleRequest(request);

  }

  else

  {

  cout << "Can't deal with " << request << endl;

  }

  }

  };

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇STL中map与hash_map的比较 下一篇C/C++中容器vector使用方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)