用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理
中介者模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| abstract class Mediator { public abstract void Send(string message, Colleague colleague); }
abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } } class ConcreateMediator : Mediator { private ConcreateColleague1 colleague1; private ConcreateColleague2 colleague2; public ConcreateColleague1 Colleague1 { set{colleague1 = value;} } public ConcreateColleague2 Colleague2 { set{colleague2 = value;} } public override void Send(string message, Colleague colleague) { if(colleague == colleague1) colleague2.Notify(message) else colleague1.Notify(message); } } class ConcreateColleague1 : Colleague { public ConcreateColleague1(Mediator mediator) : base(mediator) {} public void Send(string message) { mediator.Send(message, this); } public void Notify(string message) { Console.WriteLine("Colleague 1 Recv " + message); } } class ConcreateColleague2 : Colleague { public ConcreateColleague2(Mediator mediator) : base(mediator) {} public void Send(string message) { mediator.Send(message, this); } public void Notify(string message) { Console.WriteLine("Colleague 2 Recv " + message); } }
ConcreateMediator m = new ConcreateMediator(); ConcreateColleague1 c1 = new ConcreateColleague1(m); ConcreateColleague2 c2 = new ConcreateColleague2(m);
m.colleague1 = c1; m.colleague2 = c2;
c1.Send("你瞅啥"); c2.Send("瞅你咋地");
|