设计模式之职责链模式(COR)

概念
Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这些对象连成一条链(形成一个链表,按链的顺序执行),并沿着这条链传递该请求,直到有一个对象处理它为止.

例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,…,直到D完成d部分。

例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处理的部分交给省政府,省政府再完成自己职责范围内的部分,不能处理的部分交给中央政府,中央政府最后完成该项工作。

在这里插入图片描述
Handler
处理类的抽象父类。

concreteHandler
具体的处理类。

责任链优缺点

优点:
1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。

2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。

3。类与类之间可以以松耦合的形式加以组织。

缺点:
因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。

适用于:
链条式处理事情。工作流程化、消息处理流程化、事物流程化;

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();
                  }
         }
};
void main()
{
         CarHandleHead*head = new CarHandleHead;
         CarHandleBody*body = new CarHandleBody;
         CarHandleTail*tail = new CarHandleTail;
         head->setNextHandle(body);
         body->setNextHandle(tail);
         tail->setNextHandle(NULL);
         //处理
         head->HandleCar();
         delete head;
         delete body;
         delete tail;
         system("pause");
         return;
}

要点总结

Chain of Responsibility模式的应用场合在于“一个请求可能有多个接受者,但是最后真正的接受者只有一个”,这时候请求发送者与接受者的耦合有可能出现变化脆弱的症状,责任链的目的就是将二者解耦,从而更好地应对变化

如果请求传递到职责链的末尾仍得不到处理,应该有一个合理的缺省机制。这也是每个接收对象的责任,而不是发出请求的对象的责任。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值