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

责任链模式是使用多个对象处理用户请求的成熟模式,它的关键是将这处理对象组成一个链。每个对象含有后继对象的引用,如果不能处理目前的请求就把它传给后继对象处理。

    该模式中有两种角色:

1、处理者:是一个接口或者抽象类,规定了具体处理者处理用户请求的方法,还有设置后继对象的方法

2、具体处理者:是具体的处理者的实现。

    本例子中,是一个查询用户身份证号码的例子,不同的具体处理者代表不同的城市,然后对一个身份证号码的请求进行处理。有三个文件,Handler.h和Handler.cpp以及测试用的ResponsibilityChainTest.cpp

(1)Handler.h

 1 #ifndef _HANDLER_H_
 2 #define _HANDLER_H_
 3 #include <iostream>
 4 #include <list>
 5 #include <string>
 6 using namespace std;
 7 
 8 /*
 9 责任链模式 
10 有很多的对象可以处理请求,
11 但是用户并不感知是那个对象处理了他的请求。
12 */
13 
14 //抽象类
15 class Handler{
16 public:
17     virtual void handleRequest(string number) = 0;
18     virtual void setNextHandler(Handler* handler) = 0;
19 };
20 
21 
22 //具体处理者1
23 class Beijing : public Handler{
24 public:
25     Beijing();
26     void handleRequest(string number) override;
27     void setNextHandler(Handler* handler) override;
28 
29 private:
30     Handler *myHandler;
31     list<string> numberList;
32 };
33 
34 //具体处理者2
35 class Shanghai : public Handler{
36 public:
37     Shanghai();
38     void handleRequest(string number) override;
39     void setNextHandler(Handler* handler) override;
40 
41 private:
42     Handler *myHandler;
43     list<string> numberList;
44 };
45 
46 //具体处理者3
47 class Tianjin : public Handler{
48 public:
49     Tianjin();
50     void handleRequest(string number) override;
51     void setNextHandler(Handler* handler) override;
52 
53 private:
54     Handler *myHandler;
55     list<string> numberList;
56 };
57 
58 
59 
60 #endif
View Code

相关文章:

  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2021-06-22
  • 2021-09-30
  • 2021-05-17
  • 2022-01-29
  • 2021-04-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2021-05-19
  • 2022-12-23
  • 2021-09-27
  • 2022-12-23
相关资源
相似解决方案