中介者模式

1、预习

  书中是以联合国的例子来说明中介者模式的理解,即世界上各个国家之间发生事务时的交流解决方式,大致来说每个国家都不必要与每个具体的国家接触,而是可以通过联合国来与其他国家交流,这即是中介模式。如果以我们使用最多的例子来说的话(C#+VS2013),想想我们经常建立的Windows窗体应用程序,其实form.cs这个类就是中介者模式最好的体现,即我们不需要知道界面上的每个控件,而是通过再form.cs中就可以操作各个控件。

  从原则上来说,“迪米特法则”中之处如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

2、定义

  用一个中介对象来封装一些列的对象交互。中介者使各对象之间不需要显示的相互引用,从而达到松散耦合的目的,而且可以独立的改变他们之间的交互。

3、代码设计

  ①首先需要定义好中介者类,有一个方法来完成不同对象之间的通信。

  ②定义对象类,每一个对象如果想向另外一个对象发送消息,就必须要通过中介者,因此有一个方法(参数:消息内容,参数:中介者)向中介者发送消息。同时还需要一个方法可以获取由中介者发送回来的消息。也即:每个对象的工作就是把消息发送给中介者,然后等待从中介者返回的消息。

  ③在具体的中介者中,需要知道每一个对象,然后在其内部设置具体的通信双方;也就是由中介者内部完成两个对象通信桥梁的建立工作。

4、理解

  中介者模式减少了各个具体对象之间的交互,使得各个对象可以独立的进行更改;而由中介者来完成各个对象之间的交互,即把对象之间的通信进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这时中介者所关注的对象就集中的各个具体对象之间的交互上来,也就是中介者可以站在一个更加宏观的角度去看待各个对象的整体。

  但是,中介者模式控制了集中化,就把原来两个对象之间的交互复杂性变成了中介者的复杂性,这样也使得中介者比任何一个具体对象都复杂,当对象数量不断增加时,中介者类也越来越复杂,从而也很难维护。

  也就是说,中介者模式的优点是“集中控制”,但这同时也是他的缺点。因此,中介者模式也很容易误用。我们在系统中碰到多对多交互复杂的对象群时,不要急于使用中介者模式;一定要先考虑系统出现这样的情况是设计上的原因,还是业务本身的需求,然后再考虑使用具体的模式。

原文地址:https://www.cnblogs.com/qingtian-jlj/p/6180904.html