设计模式 中介者模式(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 }