中介者模式

来源:互联网 发布:mac系统远程桌面工具 编辑:程序博客网 时间:2024/04/28 21:12

定义

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

结构与说明

Mediator : 中介者接口
ConcreteMediator : 具体的中介者对象
Colleague : 同事类的定义,通常定义为抽象类,实现对象的公共功能(比如,对中介者的持有)

实现

//常规的实现方式,省略日志记录/**抽象的同事类*/publc abstract class Colleague{    private Mediator mediator;    public Colleague(Mediator _mediator){        this.mediator = _mediator;    }    public Mediator getMediator(){        return mediator;    }    ....//其他的一些操作}/**中间者接口*/public interface Mediatorpublic void changed(Colleague colleague);/**具体的同事*/public class ConcreteColleague  extends Colleague{    public ConcreteColleague(Mediator mediator){        super(mediator);    }    public void someOperation(){        getMediator().changed(this);    }}/**具体的中介者*/public class ConcreteMediator  implements Mediator{    private ConcreteColleagueA A;    private ConcreteColleagueB B;    ......//A B的set方法    public void changed(Colleague colleague){        //A B之间的协调机制    }}

一些讨论:

  • 根据业务规则,中介者的接口并不是一定需要的
  • 根据业务实现,同事类并不一定有一致的父类接口
  • 根据业务规则,可以将中介者定为单例模式,在同事类中直接调用
  • 根据业务实现,可以不统一通知函数
  • 根据业务实现,可以将同事和中介者使用通知者模式,中介者不必持有所有所有的同事类。
    满足上述任意一个要求,都是广义中介者
    使用中介者模式的时候,千万别将中介类弄得过于膨胀,中介者是为了降低耦合,但是过度集中也是设计缺陷。
    在学习MVC的时候,其中的C就是Controller,是Model和View的中介对象。
No Final is final
By   Xu.j.h
0 0