设计模式 中介者模式(Mediator Pattern)

意图

  用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

适用性

  一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。

  一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

  想定制一个分布在多个类中的行为,而又不想生成太多的子类。 

结构图

  

Code

 1 // Mediator
 2 
 3 
 4 /* Notes:
 5  * Consider a mediator as a hub, which objects that need to talk -
 6  * but do not wish to be interdependent - can use. 
 7  */
 8  
 9 namespace Mediator_DesignPattern
10 {
11     using System;
12 
13     class Mediator 
14     {
15         private DataProviderColleague dataProvider;
16         private DataConsumerColleague dataConsumer;
17         public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2)
18         {
19             dataProvider = c1;
20             dataConsumer = c2;            
21         }
22         
23         public void DataChanged()
24         {
25             int i = dataProvider.MyData;
26             dataConsumer.NewValue(i);
27         }
28     }
29 
30     class DataConsumerColleague 
31     {
32         public void NewValue(int i)
33         {
34             Console.WriteLine("New value {0}", i);
35         }
36     }
37 
38     class DataProviderColleague
39     {
40         private Mediator mediator;
41         private int iMyData=0;
42         public int MyData 
43         {
44             get 
45             {
46                 return iMyData;
47             }
48             set 
49             {
50                 iMyData = value;
51             }
52         }
53         public DataProviderColleague(Mediator m)
54         {
55             mediator = m;
56         }
57 
58         public void ChangeData()
59         {
60             iMyData = 403;
61 
62             // Inform mediator that I have changed the data
63             if (mediator != null)
64                 mediator.DataChanged();    
65         }        
66     }
67 
68     /// <summary>
69     ///    Summary description for Client.
70     /// </summary>
71     public class Client
72     {
73         public static int Main(string[] args)
74         {            
75             Mediator m = new Mediator();
76             DataProviderColleague c1 = new DataProviderColleague(m);
77             DataConsumerColleague c2 = new DataConsumerColleague();
78             m.IntroduceColleagues(c1,c2);
79 
80             c1.ChangeData();
81 
82             return 0;
83         }
84     }
85 }
posted @ 2012-04-16 15:37  孙金棚  阅读(369)  评论(1编辑  收藏  举报