设计模式——行为性——职责链模式

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


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


class Handle
{
public:
 Handle(){}
 virtual ~Handle(){}
 void SetSuccessor(Handle* successor)  //设置后继,这里必须用指针,只是声明,没有去定义。
 {
  this->h_hander = successor;
 }
 virtual void HandleRequest(int request)=0; //处理请求
protected:
 Handle* h_hander;
};
class Handler1:public Handle
{
public:
 void HandleRequest(int request);
};
class Handler2:public Handle
{
public:
 void HandleRequest(int request); 
};
class Handler3:public Handle
{
public:
 void HandleRequest(int request);
};
 
#include <iostream>
#include "Test.h"
using namespace std;
void Handler1::HandleRequest(int request)
{
 if (request >=0 && request < 10)
 {
  cout<<"Handle1"<<endl;
 }
 else if(NULL != h_hander)
 {
  h_hander->HandleRequest(request);
 }
}
void Handler2::HandleRequest(int request)
{
 if (request >=10 && request < 20)
 {
  cout<<"Handle2"<<endl;
 }
 else if(NULL != h_hander)
 {
  h_hander->HandleRequest(request);
 }
}
void Handler3::HandleRequest(int request)
{
 if (request >=20 && request < 30)
 {
  cout<<"Handle3"<<endl;
 }
 else if(NULL != h_hander)
 {
  h_hander->HandleRequest(request);
 }
}
int main()
{
 Handle* h1 = new Handler1;
 Handle* h2 = new Handler2;
 Handle* h3 = new Handler3;
 h1->SetSuccessor(h2);
 h2->SetSuccessor(h3);
 h1->HandleRequest(15);
 return 0;
}

优缺点:

缺点:当链很长时,前面的对象没有做任何的事情,而只是做了一个传递工作。而传递工作之后,他们就成了垃圾对象。也就是说,他们在实际的处理中,并没有发挥任何的作用。会产生很多的内存垃圾对象。

优点:请求的发送者不用关心具体由哪个对象来处理,只要可以处理就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值