中介者模式
【1】什么是中介者模式?
中介者模式:
【2】中介者模式代码示例:
代码示例:
1 #include<iostream>
2 #include <string>
3 using namespace std;
4
5 class Mediator;
6 class ConcreteColleague1;
7 class ConcreteColleague2;
8
9 class Colleague
10 {
11 protected:
12 Mediator *mediator;
13 public:
14 Colleague(Mediator *mediator)
15 {
16 this->mediator = mediator;
17 }
18 };
19
20
21 class ConcreteColleague1 : public Colleague
22 {
23 public:
24 ConcreteColleague1(Mediator *mediator) : Colleague(mediator)
25 {}
26 void send(string message);
27 void notify(string message)
28 {
29 cout << "同事1得到消息: " << message << endl;
30 }
31 };
32
33 class ConcreteColleague2 : public Colleague
34 {
35 public:
36 ConcreteColleague2(Mediator *mediator) : Colleague(mediator)
37 {}
38 void send(string message);
39 void notify(string message)
40 {
41 cout << "同事2得到消息: " << message << endl;
42 }
43 };
44
45 class Mediator
46 {
47 public:
48 virtual void send(string name, Colleague *colleague)=0;
49 };
50
51 class ConcreteMediator : public Mediator
52 {
53 public:
54 ConcreteColleague1 *colleague1;
55 ConcreteColleague2 *colleague2;
56 public:
57 void send(string message, Colleague *colleague)
58 {
59 if (colleague == colleague1)
60 {
61 colleague2->notify(message);
62 }
63 else
64 {
65 colleague1->notify(message);
66 }
67 }
68 };
69
70
71 void ConcreteColleague1::send(string message)
72 {
73 mediator->send(message, this);
74 }
75
76 void ConcreteColleague2::send(string message)
77 {
78 mediator->send(message, this);
79 }
80
81 int main()
82 {
83 ConcreteMediator *m = new ConcreteMediator();
84 ConcreteColleague1 *c1 = new ConcreteColleague1(m);
85 ConcreteColleague2 *c2 = new ConcreteColleague2(m);
86
87 m->colleague1 = c1;
88 m->colleague2 = c2;
89
90 c1->send("吃饭啦");
91 c2->send("去 ");
92
93 return 0;
94 }
95 //Result:
96 /*
97 同事2得到消息: 吃饭啦
98 同事1得到消息: 去
99 */
代码示例2:
1 #include<iostream>
2 #include <string>
3 using namespace std;
4
5 class Country;
6
7 class UniteNations
8 {
9 public:
10 virtual void declare(string message, Country *colleague) = 0;
11 };
12
13 class Country
14 {
15 protected:
16 UniteNations *mediator;
17 public:
18 Country(UniteNations *mediator)
19 {
20 this->mediator = mediator;
21 }
22 };
23
24 class USA : public Country
25 {
26 public:
27 USA(UniteNations *mediator) : Country(mediator)
28 {}
29 void declare(string message)
30 {
31 mediator->declare(message, this);
32 }
33 void getMessage(string message)
34 {
35 cout << "美国获得对方信息: " << message << endl;
36 }
37 };
38
39 class Iraq : public Country
40 {
41 public:
42 Iraq(UniteNations *mediator):Country(mediator)
43 {}
44 void declare(string message)
45 {
46 mediator->declare(message, this);
47 }
48 void getMessage(string message)
49 {
50 cout << "伊拉克获得对方信息: " << message << endl;
51 }
52 };
53
54 class UnitedNationsSecurityCouncil:public UniteNations
55 {
56 public:
57 USA *usa;
58 Iraq *iraq;
59 void declare(string message, Country *colleague)
60 {
61 if (colleague == usa)
62 {
63 iraq->getMessage(message);
64 }
65 else
66 {
67 usa->getMessage(message);
68 }
69 }
70 };
71
72 int main()
73 {
74 UnitedNationsSecurityCouncil *unsc = new UnitedNationsSecurityCouncil();
75
76 USA *c1 = new USA(unsc);
77 Iraq *c2 = new Iraq(unsc);
78
79 unsc->usa = c1;
80 unsc->iraq = c2;
81
82 c1->declare("不准开发核武器,否则打你!");
83 c2->declare("他妈的美国去死!");
84
85 return 0;
86 }
87 //Result:
88 /*
89 伊拉克获得对方信息: 不准开发核武器,否则打你!
90 美国获得对方信息: 他妈的美国去死!
91 */
Good Good Study, Day Day Up.
顺序 选择 循环 总结