首页 > 代码库 > 中介者(Mediator)模式
中介者(Mediator)模式
中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互
了解《迪米特法则》的朋友就知道,迪米特法则说的就是:一个对象应当对其它对象有尽可能少的了解
迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用性才可以提高。
Mediator: 抽象中介者, 提供一个传递双方的方法 abstract void Send(string message, Colleague colleague),所以需要Colleague 买卖双方的抽象实例。
ConcreteMediator: 具体中介者,它的作用就是买卖双方的桥梁,所以它中介需要有 买卖双方的具体实例。
所以就定义ConcreteColleague1 Colleague1,ConcreteColleague2 Colleague2 买卖双方的一个属性,它就是Colleague1 Colleague2 之间的桥梁。
Colleague: 抽象买卖商人,他们之间的传递 是靠中介者来完成的所以 需要Mediator mediator中介对象构造函数Colleague(Mediator mediator)。
ConcreteColleague1: 具体买家1,自然也知道他委托的中介是谁,ConcreteColleague1(Mediator mediator)。
//实例一个 m 中介者。 ConcreteMediator m = new ConcreteMediator(); //实例 买家 卖商家,他们的中介者都是m ConcreteColleague1 c1 = new ConcreteColleague1(m); ConcreteColleague2 c2 = new ConcreteColleague2(m); m.Colleague1 = c1; m.Colleague2 = c2; //买家通过中介 传话给卖家 c1.Send("买家说-房子120W卖不"); //卖家通过中介回复 c2.Send("卖家说-120W你卖我10套?"); Console.ReadLine(); /// <summary> /// Mediator 抽象中介者 /// </summary> public abstract class Mediator { public abstract void Send(string message, Colleague colleague); } /// <summary> /// Colleague 抽象同事类 /// </summary> public abstract class Colleague { protected Mediator mediator; /// <summary> /// 构造函数中 得到中介者 /// </summary> public Colleague(Mediator mediator) { this.mediator = mediator; } } /// <summary> /// ConcreteMediator 具体中介者 /// </summary> public class ConcreteMediator : Mediator { public ConcreteColleague1 Colleague1 { get; set; } public ConcreteColleague2 Colleague2 { get; set; } public override void Send(string message, Colleague colleague) { if (colleague == Colleague1) { Colleague2.Notify(message); } else { Colleague1.Notify(message); } } } /// <summary> /// 具体买家 /// </summary> public class ConcreteColleague1 : Colleague { public ConcreteColleague1(Mediator mediator) : base(mediator) { } public void Send(string message) { mediator.Send(message, this); } public void Notify(string message) { Console.WriteLine("买家得到信息:" + message); } } /// <summary> /// 具体卖家 /// </summary> public class ConcreteColleague2 : Colleague { public ConcreteColleague2(Mediator mediator) : base(mediator) { } public void Send(string message) { mediator.Send(message, this); } public void Notify(string message) { Console.WriteLine("卖家得到信息:" + message); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。