Code Example |
1 // Mediator 2 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 7 // For further information, read "Design Patterns", p273, Gamma et al., 8 // Addison-Wesley, ISBN:0-201-63361-2 9 10 /**//* 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  { 17 using System; 18 19 class Mediator 20 { 21 private DataProviderColleague dataProvider; 22 private DataConsumerColleague dataConsumer; 23 public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2) 24 { 25 dataProvider = c1; 26 dataConsumer = c2; 27 } 28 29 public void DataChanged() 30 { 31 int i = dataProvider.MyData; 32 dataConsumer.NewValue(i); 33 } 34 } 35 36 class DataConsumerColleague 37 { 38 public void NewValue(int i) 39 { 40 Console.WriteLine("New value {0}", i); 41 } 42 } 43 44 class DataProviderColleague 45 { 46 private Mediator mediator; 47 private int iMyData=0; 48 public int MyData 49 { 50 get 51 { 52 return iMyData; 53 } 54 set 55 { 56 iMyData = value; 57 } 58 } 59 public DataProviderColleague(Mediator m) 60 { 61 mediator = m; 62 } 63 64 public void ChangeData() 65 { 66 iMyData = 403; 67 68 // Inform mediator that I have changed the data 69 if (mediator != null) 70 mediator.DataChanged(); 71 } 72 } 73 74 /**//// <summary> 75 /// Summary description for Client. 76 /// </summary> 77 public class Client 78 { 79 public static int Main(string[] args) 80 { 81 Mediator m = new Mediator(); 82 DataProviderColleague c1 = new DataProviderColleague(m); 83 DataConsumerColleague c2 = new DataConsumerColleague(); 84 m.IntroduceColleagues(c1,c2); 85 86 c1.ChangeData(); 87 88 return 0; 89 } 90 } 91 } 92 93 |