Code Example |
1 // Mediator 2![](/Images/OutliningIndicators/None.gif) 3 // Intent: "Define an object that encapsulates how a set of objects interact. 4 // Mediator promotes loose coupling by keeping objects from referring to each 5 // other explicitly, and it lets you vary their interaction independently." 6![](/Images/OutliningIndicators/None.gif) 7 // For further information, read "Design Patterns", p273, Gamma et al., 8 // Addison-Wesley, ISBN:0-201-63361-2 9![](/Images/OutliningIndicators/None.gif) 10![](/Images/OutliningIndicators/ExpandedBlockStart.gif) /**//* Notes: 11 * Consider a mediator as a hub, which objects that need to talk - 12 * but do not wish to be interdependent - can use. 13 */ 14 15 namespace Mediator_DesignPattern 16![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) { 17 using System; 18![](/Images/OutliningIndicators/InBlock.gif) 19 class Mediator 20![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 21 private DataProviderColleague dataProvider; 22 private DataConsumerColleague dataConsumer; 23 public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2) 24![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 25 dataProvider = c1; 26 dataConsumer = c2; 27 } 28 29 public void DataChanged() 30![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 31 int i = dataProvider.MyData; 32 dataConsumer.NewValue(i); 33 } 34 } 35![](/Images/OutliningIndicators/InBlock.gif) 36 class DataConsumerColleague 37![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 38 public void NewValue(int i) 39![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 40 Console.WriteLine("New value {0}", i); 41 } 42 } 43![](/Images/OutliningIndicators/InBlock.gif) 44 class DataProviderColleague 45![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 46 private Mediator mediator; 47 private int iMyData=0; 48 public int MyData 49![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 50 get 51![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 52 return iMyData; 53 } 54 set 55![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 56 iMyData = value; 57 } 58 } 59 public DataProviderColleague(Mediator m) 60![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 61 mediator = m; 62 } 63![](/Images/OutliningIndicators/InBlock.gif) 64 public void ChangeData() 65![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 66 iMyData = 403; 67![](/Images/OutliningIndicators/InBlock.gif) 68 // Inform mediator that I have changed the data 69 if (mediator != null) 70 mediator.DataChanged(); 71 } 72 } 73![](/Images/OutliningIndicators/InBlock.gif) 74![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//// <summary> 75 /// Summary description for Client. 76 /// </summary> 77 public class Client 78![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 79 public static int Main(string[] args) 80![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 81 Mediator m = new Mediator(); 82 DataProviderColleague c1 = new DataProviderColleague(m); 83 DataConsumerColleague c2 = new DataConsumerColleague(); 84 m.IntroduceColleagues(c1,c2); 85![](/Images/OutliningIndicators/InBlock.gif) 86 c1.ChangeData(); 87![](/Images/OutliningIndicators/InBlock.gif) 88 return 0; 89 } 90 } 91 } 92![](/Images/OutliningIndicators/None.gif) 93![](/Images/OutliningIndicators/None.gif) |