C++设计模式实现--职责链模式(三)

2014-07-19 23:03:50 · 作者: · 浏览: 164

 

  //具体处理类 C

  class ConcreteHandleC: public Handle

  {

  public:

  void HandleRequest(int request)

  {

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

  {

  cout << "ConcreteHandleC deal with: " << request <

  }

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

  {

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

  }

  else

  {

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

  }

  }

  };

  //////////////////////////////////////////////////////////////////////////

  //测试

  int main()

  {

  Handle* h1 = new ConcreteHandleA();

  Handle* h2 = new ConcreteHandleB();

  Handle* h3 = new ConcreteHandleC();

  //设置其上级

  h1->SetSuccessor(h2);

  h2->SetSuccessor(h3);

  h1->HandleRequest(300);

  h1->HandleRequest(600);

  h1->HandleRequest(1500);

  h1->HandleRequest(3000);

  delete h1;

  delete h2;

  delete h3;

  return 0;

  }

  三. 说明

  1. 职责链的特点是:当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。

  2. 职责链的好处是:请求者不用管哪个对象来处理,反正该请求会被处理。它只需保持一个后继者即可。

  3. 要注意的是:一个请求到链的最后可能也没有处理,所以一定要配置得当。