中介者(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);
}
}

最新文章

  1. 无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决
  2. Tomcat 知识点
  3. jQuery自动与手动图片切换效果下载
  4. .NET应用架构设计—重新认识分层架构(现代企业级应用分层架构核心设计要素)
  5. JAVA中使用FTPClient上传下载
  6. 使用IntelliJ IDEA 配置Maven(入门)(转)
  7. flddler使用方法
  8. Windows安装java
  9. 同是url参数传进来的值,String类型就用getAttribute获取不到,只能用getParameter获取,而int就两个都可以这是为什么?
  10. visio 改变画布大小
  11. Css基础-介绍及语法
  12. 关于打开Eclipse时出现eclipse failed to create the java virtual machine与locking is not possible in the directory问题的解决
  13. SublimeLinter 3中使用jshint
  14. scala练手之数字转汉字小工具
  15. Visual Studio2010重新安装后,冲突问题
  16. define 的全部使用方法
  17. Python:当你遇到了the package “public”?
  18. UE4 Creating 3D Widget Interaction
  19. SQLserver 还原数据库报“指定转换无效”的错的解决方案
  20. poj1742 多维背包

热门文章

  1. sar 命令
  2. git忽略一些提交上传的文件
  3. Spring缓存源码剖析:(一)工具选择
  4. Oracle 常见hint
  5. C#一个判断子串在父串中出现的次数
  6. springboot成神之——Scheduler定时任务
  7. MFC 菜单栏杂记
  8. 关于Bootstrap的整理和理解
  9. 一.lock的使用
  10. 「小程序JAVA实战」 小程序手写属于自己的第一个demo(六)