初学设计模式之中介者(Mediator)模式

1、定义与概念

原始的定义是用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示的交互引用,从而使其耦合解散,而且独立的改变他们之间的交互。用通俗一点的话来描述就是,本来是对象1和对象2之间的调用,现在都改成对象1调用终结者对象,再由由中介者调用对象2,反之亦然。

2、中介者模式的优点、缺点

优点:

因为中介者使在对象与对象之间起到中转站的作用,因此降低了对象与对象之间的耦合性

如果原来对象们之间的交互方式错综复杂,呈现出网状结构,可以通过中介者把网状结构变成星形结构,使得结构变得更加清晰

缺点

中介者自身的逻辑过于复杂,和不同同事之间依赖的关系太多,如果对象们本身的交互方式不是很复杂,就不需要中介者模式

3、程序例子

考虑一个场景:大家在工作大厅上班,因为比较安静,同事与同事之间不能直接沟通,就需要在线聊天工具作为中介者,同事A向在线工具传递信息,在线工具再向另外一个同事传递信息

 1 #include"iostream"
 2 using namespace std;
 3 class AbstractColleage;
 4 class AbstractMediator
 5 {
 6 public:
 7     virtual void declare(AbstractColleage *m_AbstractColleage)
 8     {
 9     };
10 };
11 class AbstractColleage
12 {
13 public:
14 AbstractMediator* m_AbstractMediatorPtr;
15 public:
16 void set(AbstractMediator *AbstractMediator)
17 {
18 m_AbstractMediatorPtr=AbstractMediator;
19 }
20 };
21 
22 //同事A
23 class ColleageA:public AbstractColleage
24 {
25 public:
26 void declare()
27 {
28 cout<<"同事A发消息"<<endl;
29 m_AbstractMediatorPtr->declare(this);
30 };
31 void receive()
32 {
33 cout<<"同事A收到消息"<<endl;
34 };
35 };
36 
37 //同事B
38 class ColleageB:public AbstractColleage
39 {
40 public:
41 void declare()
42 {
43 cout<<"同事B发消息"<<endl;
44 m_AbstractMediatorPtr->declare(this);
45 }
46 void receive()
47 {
48 cout<<"同事B收到消息"<<endl;
49 }
50 };
51 
52 //具体中介者
53 class ConcreteMediator:public AbstractMediator 
54 {
55 public:
56 ColleageA m_colleageA;
57 ColleageB m_colleageB;
58 
59 public:
60 void declare(AbstractColleage *m_AbstractColleage)
61 {
62 if (m_AbstractColleage==&m_colleageA)
63 {
64 m_colleageB.receive();
65 }
66 else
67 {
68 m_colleageA.receive();
69 }
70 }
71 
72 };
73 
74 int main()
75 {
76 ConcreteMediator m_ConcreteMediator;
77 ColleageA m_ColleageA;
78 ColleageB m_ColleageB;
79 m_ConcreteMediator.m_colleageA=m_ColleageA;
80 m_ConcreteMediator.m_colleageB=m_ColleageB;
81 m_ColleageA.m_AbstractMediatorPtr=&m_ConcreteMediator;
82 m_ColleageB.m_AbstractMediatorPtr=&m_ConcreteMediator;
83 
84 m_ColleageA.declare();
85 
86 getchar();
87 return 0;
88 }

 

4类图总结

 

5、核心记忆(菜鸟驿站:集中取快递和邮快递的地方)

中介者模式就是为多个交互对象设立了中转站,让错综复杂的网状结构变成了星状结构

 

posted on 2019-11-03 14:43  宏择一城  阅读(171)  评论(0编辑  收藏  举报

导航