zoukankan      html  css  js  c++  java
  • 设计模式之中介者模式

        意图:

     
            中介者模式也属于行为模式的一种,它的意图是使用一个中介对象来封装一系列的对象交互。中介者使得对象不需要显示的相互引用,从而使其耦合松散,而且可以独立改变它们之间的交互。
     
        动机:
     
            面向对象的设计鼓励将行为分布到各个对象中去,这种分布可能导致对象间有许多的连接,在最坏的情况下,每一个对象都知道其他所有对象。
     
            虽然将一个系统分解为许多个对象可以增强其复用性,但对象间相互连接的激增又会降低其复用性。大量相互连接使得对象似乎不太可能在没有其他对象支持下工作-系统表现为一个不可分割的整体。而且对系统进行任何形式的改变都会变得非常困难,因为许多行为被分配在不同对象中。结果是不得不定制很多子类以定制系统的行为。
     
        例子:
     
            就拿最贴近我们生活的OEM手机做个例子,市场上有个花生公司,专门生产花生手机,已经有了1代,2代现在正准备生成3代和4代。我们知道手机是由很多个部件组成的,有屏幕,电板,CPU生成厂家等等。花生公司前两部手机都是自己设计和生产的,后来他们发现,花费了这么多功夫自己设计手机,非常耗时,而且成本也居高不下,最主要的是,当完成1代生产进入二代生产的时候,发现自己原有的磨具,屏幕,电板卧槽都用不了了,或者说需要重新进行设计和组合。
     
            花生公司发现这样弄不行啊,公司最擅长的不是做产品啊,是炒货啊,这样大投入太影响主页了,于是它们想了个办法,将花生3代,花生4代交由代工厂去做,公司只要下命令说给我生产花生手机3代就行了,不用理会下面复杂的设计和生产工序,实际上降低了生产成本。
     
            在这里,花生公司就可以看做是业务的驱动者,在中介者模式中是Colleague class(同事类),而OEM公司则是中介者;复杂的部件生产厂家就是互相协作的类,也是我们想简化的目标。
     
        适用性:
     
            一组对象以定义良好但复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
     
                (在具体的软件生产中,当业务逻辑复杂到无法维护的情况下,通常会有人提出说将其进行重构和优化,最简单的就是抽象出中介类,对功能进行更高层次的抽象,我们都在使用,但是不知道叫中介者而已)
     
            一个对象引用其他很多对象并直接与这些对象通信,导致难以复用
     
                 (复杂的类通常是难以重用的,为什么对象关心别人胜过关心自己呢)
     
            想定制一个分布于多个类的行为,而又不想生成太多的子类
     
        结构:
     
            
     
        解释:
     
            Mediator, 中介者,定义一个借口用户和同事通信
     
            ConcreteMediator,具体中介者,协调各个同事对象实现协作行为;了解并维护他的同事对象
     
            Colleague class,每个同事类都知道中介者对象的存在,同事间相互通信的时候都需要通过中介者转发
     
               
     
        协作:
     
            同事向一个中介者对象发送和接收请求。中介者在同事间适当的转发请求以实现协作行为
     
        效果:
     
            减少了子类生成,将各个colleague解耦,简化了对象协议,对对象如何协作进行了抽象,使得控制集中化
     
        相关模式:
     
            与Facde模式不同的地方在于他对一个对象子系统进行抽象,从而提供了一个更为方便的接口。协议是单向的,即Facade对子系统类提供请求,反之不同。相反,中介者提供了colleague不能支持的行为,且其协议是多向的。
  • 相关阅读:
    python读取配置文件
    日志截取
    QJsonObject
    OpenStack
    生成器迭代器正则视频笔记
    使用Qt.createComponent 动态加载组件
    linux 远程执行命令
    Django 建立工程连接数据库
    arm基础1
    QSetting的用法
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/4513071.html
Copyright © 2011-2022 走看看