| 结构 |
 |
| 意图 |
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 |
| 适用性 |
- 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
- 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
- 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
|
![]()
1 using System;
2
3 class Mediator
4 {
5 private DataProviderColleague dataProvider;
6 private DataConsumerColleague dataConsumer;
7 public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2)
8 {
9 dataProvider = c1;
10 dataConsumer = c2;
11 }
12
13 public void DataChanged()
14 {
15 int i = dataProvider.MyData;
16 dataConsumer.NewValue(i);
17 }
18 }
19
20 class DataConsumerColleague
21 {
22 public void NewValue(int i)
23 {
24 Console.WriteLine("New value {0}", i);
25 }
26 }
27
28 class DataProviderColleague
29 {
30 private Mediator mediator;
31 private int iMyData=0;
32 public int MyData
33 {
34 get
35 {
36 return iMyData;
37 }
38 set
39 {
40 iMyData = value;
41 }
42 }
43 public DataProviderColleague(Mediator m)
44 {
45 mediator = m;
46 }
47
48 public void ChangeData()
49 {
50 iMyData = 403;
51
52 // Inform mediator that I have changed the data
53 if (mediator != null)
54 mediator.DataChanged();
55 }
56 }
57
58 /// <summary>
59 /// Summary description for Client.
60 /// </summary>
61 public class Client
62 {
63 public static int Main(string[] args)
64 {
65 Mediator m = new Mediator();
66 DataProviderColleague c1 = new DataProviderColleague(m);
67 DataConsumerColleague c2 = new DataConsumerColleague();
68 m.IntroduceColleagues(c1,c2);
69
70 c1.ChangeData();
71
72 return 0;
73 }
74 }
中介者模式