14 行为型模式-----职责链模式

模式动机(Chain of Responsibility Pattern)对于某个请求,有多个接收者都可能处理,将这样的接收者链接成一个单向链表,根据不同的请求类型决定最终由哪个结点负责处理。不同结点需要维护一个指向下一个结点的链接,该链接可以通过构造结点时传入,也可以通过结点接口指定下一个接收结点。抽象类负责定义公共接口及其默认实现。

模式结构图:

 

14 行为型模式-----职责链模式

 

模式代码:

bt_职责链模式.h:

 1 #ifndef RP_H

 2 #define RP_H

 3 #include <iostream>

 4 using namespace std;

 5 

 6 /*

 7     抽象处理接口

 8 */

 9 class Handler

10 {

11 public:

12     virtual ~Handler(){ }

13     void setSuccessor(Handler* successor)

14     {

15         this->successor = successor;

16     }

17     virtual void HandleRequest(int requestNum)

18     {

19         if(successor != NULL)

20             successor->HandleRequest(requestNum);

21         else

22             return ;

23     }

24 

25 private:

26     Handler* successor; 27 };

28 

29 /*

30     具体处理类A,处理范围:< 100

31 */

32 class ConcreteHandlerA : public Handler

33 {

34 public:

35     virtual void HandleRequest(int requestNum)

36     {

37         if(requestNum < 100)

38             cout << "类A处理完毕" << endl;

39         else

40         {

41             cout << "类A不能处理,正在转发请求中..." << endl;

42  Handler::HandleRequest(requestNum); 43         }

44 

45     }

46 };

47 

48 /*

49     具体处理类B,处理范围:< 200

50 */

51 class ConcreteHandlerB : public Handler

52 {

53 public:

54     virtual void HandleRequest(int requestNum)

55     {

56         if(requestNum < 200)

57             cout << "类B处理完毕" << endl;

58         else

59         {

60             cout << "类B不能处理,正在转发请求中..." << endl;

61             Handler::HandleRequest(requestNum);

62         }

63 

64     }

65 };

66 

67 /*

68     具体处理类C,处理范围:整个int范围

69 */

70 class ConcreteHandlerC : public Handler

71 {

72 public:

73     virtual void HandleRequest(int requestNum)

74     {

75             cout << "类C处理完毕" << endl;

76     }

77 };

78 

79 #endif // RP_H

 

测试用例.cpp:

 1 #include "bt_职责链模式.h"

 2 

 3 int main()

 4 {

 5     cout << "***** 职责链模式 *****" << endl;

 6     Handler* pHA = new ConcreteHandlerA;

 7     Handler* pHB = new ConcreteHandlerB;

 8     Handler* pHC = new ConcreteHandlerC;

 9     pHA->setSuccessor(pHB); 10 pHB->setSuccessor(pHC); 11     cout << "---------------------------" << endl;

12     int requestNum = 50;

13     pHA->HandleRequest(requestNum);

14     cout << "---------------------------" << endl;

15     requestNum = 100;

16     pHA->HandleRequest(requestNum);

17     cout << "---------------------------" << endl;

18     requestNum = 300;

19     pHA->HandleRequest(requestNum);

20 

21 

22     delete pHC;

23     delete pHB;

24     delete pHA;

25 

26     return 0;

27 }
14 行为型模式-----职责链模式
 
  

 

模式分析:

当系统中有多个对象可以处理某类请求时,适合使用职责链模式。该模式中,抽象类负责定义处理请求的公共接口,链中的具体处理结点负责处理客户请求。当前一个结点不能处理时,将请求传递到下一个结点中,依次类推。主要优点是降低了系统的耦合性,缺点是在比较长的职责链中,响应速度可能比较慢。

 

 

你可能感兴趣的:(职责链模式)