中介者模式

定義

用一箇中介對象來封裝一系列的對象交互。中介者使的各個對象不需要顯示地相互引用,從而時期耦合鬆散,而且可以獨立的改變他們之間的交互。

結構與說明

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章