刚刚学完中介者模式,觉得它和前面的几个设计模式有很多的类似点,比如说代理模式和外观模式。接下来就讨论一下它们的异同。
三个模式的区别:
代理模式:A想送B礼物,但B不认识A,也就是说互相不认识,让两者都认识的C来实现送礼物。封装了A。
中介者模式:A和B想互相通信,但是A和B可能互相不认识,通过中介者C来传达信息。封装了A与B,减少了A和B之间的耦合。
外观模式:A和B想互相送礼物或添加功能,通过C来实现所有能实现的方法,让A和B来继承C,封装了所有子类。
中介者模式:
中介者模式就是用一个中介对象来封装一系列的对象交互。这之间的各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式的优点:
1、减少各个对象之间的耦合,可以独立的改变和复用对象。
2、提高系统的灵活性,把关注它们本身的行为转移到它们之间的交互上来,从一个更宏观的角度去看系统。
中介者模式的缺点:
由于中介者集中控制对象,所以交互复杂性变为了中介者的复杂性。使得中介者比任何一个具体对象都复杂,增加了中介者的职责
就像联合国安全理事会,是世界上所有国家的中介者,它需要了解每个国家的安全,但是国家与国家之间不需要互相了解,它集中的控制了世界上所有国家的安全问题,可以从全球化的宏观角度来解决世界安全问题。但是世界上的国家那么的多,以至于这个中介者需要知道每一个国家,工作变得繁忙,这也是它的缺点所在,有一定的复杂性。
中介者模式应用的场合:
1、一组对象以定义良好但是复杂当然方式进行通信的场合。
2、想定制一个分部在多个类中的行为,而又不想生成太多的子类的场合。
外观模式:
外观模式就是为子系统中的一组接口提供一个一致的界面,子类继承外观类的所有属性方法,客户端只需要和外观类打交道,不需要知道具体子类的内部,封装了所有的子类。
代理模式:
代理模式就是为原对象创建一个代理,客户端只需和代理交互,代理负责和被操作者的交互。被操作者不用了解原对象,这样封装了原对象。
三者的联系:
1、它们都有很好的封装性,只是代理模式封装了委托代理原对象,中介者模式封装了互相不了解的通信的所有对象,外观模式封装了多有外观类的子对象。
2、代理模式针对的是单个对象,而外观模式针对的是所有子类,中介者模式针对有通信的对象双方。