zoukankan      html  css  js  c++  java
  • 大战设计模式【21】—— 中介者模式

    中介者模式(Mediator)

    设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

    一、定义

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

    二、结构

    Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。

    ConcreteMediator(具体中介者):它实现了接口,通过协调各个同事对象来实现协作行为,维持了各个同事对象的引用。

    Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。

    ConcreteColleague(具体同事类):抽象同事类的子类,每一个同事对象需要和其他对象通信时,都需要先与中介者对象通信,通过中介者来间接完成与其他同事类的通信。

    三、优点

    简化了对象之间的交互,它用中介者和同事的一对多交互替代了原来同事之间的多对多交互。

    将各同事对象解耦,可以独立地改变和复用每个同事和中介者,增加新的中介和同事很方便,符合开闭原则。

    可以减少大量同事子类的生成,改变同事行为只需要生成新的中介者子类即可。

    四、缺点

    具体中介者子类中包含了大量的同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

    五、应用场景

    系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解

    一个对象由于引用了其他很多对象并且直接和这些对象通信,难以复用该对象

    想要通过一个中间类来封装多个类的行为又不想生成太多子类,引入中介者即可实现

    六、个人总结

    1、中介者模式和名字描述的一样,就是找了一个中介然后通过这个中介来管理一些互相关联状态的类

    2、中介者模式主要就是让原来复杂的状态关联解除

    3、在交互较少或者说管理类不多的情况下不需要使用

    参考博客:http://www.cnblogs.com/edisonchou/p/7247990.html
  • 相关阅读:
    jquery点击tr换背景颜色
    poi导出excel
    Lua 可变参数 ... 的一点测试
    改写Unity DropDown 支持多次点击同一选项均回调
    g++ 生成C++ .so库文件,并调用示例
    Unity NavMesh 格式 解析 分析 对比 Recast Navigation
    SVN 问题解决之 Working copy path does not exist in repository
    SVN 问题解决之 The XML response contains invalid XML
    C++ DLL debug版本在其他PC上缺少依赖的处理方式
    Unity 宽度适配 NGUI
  • 原文地址:https://www.cnblogs.com/linkstar/p/7804767.html
Copyright © 2011-2022 走看看