天天看點

JAVA 設計模式 中介者模式

用途

中介者模式 (Mediator)

用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯示地互相引用,進而使其耦合松散,而且可以獨立地改變它們之間的互動。

中介者模式是一種行為型模式。

結構

圖-中介者模式結構圖

Mediator : 為 Colleague 對象定義一個交流接口。

abstract class Mediator {

    public abstract void Send(String message, Colleague colleague);

}

ConcreteMediator : 實作 Mediator 中的交流接口。 這個類中需要了解并維護所有的 colleague 對象。

<a></a>

class ConcreteMediator extends Mediator {

    private ConcreteColleague1 colleague1;

    private ConcreteColleague2 colleague2;

    public void setColleague1(ConcreteColleague1 colleague1) {

        this.colleague1 = colleague1;

    }

    public void setColleague2(ConcreteColleague2 colleague2) {

        this.colleague2 = colleague2;

    @Override

    public void Send(String message, Colleague colleague) {

        if (colleague == colleague1) {

            colleague2.Notify(message);

        } else if (colleague == colleague2){

            colleague1.Notify(message);

        } else {

            System.out.println("Error!");

        }

Colleague組 : 每個 Colleague 對象應該知道它的 Mediator 對象,但不知道其他同僚對象。它隻能聯系 Mediator 對象。

abstract class Colleague {

    protected Mediator mediator;

    public Colleague(Mediator mediator) {

        this.mediator = mediator;

    public void Send(String message) {

        mediator.Send(message, this);

    public abstract void Notify(String message);

class ConcreteColleague1 extends Colleague {

    public ConcreteColleague1(Mediator mediator) {

        super(mediator);

    public void Notify(String message) {

        System.out.println("同僚1得到資訊:" + message);

class ConcreteColleague2 extends Colleague {

    public ConcreteColleague2(Mediator mediator) {

        System.out.println("同僚2得到資訊:" + message);

測試代碼

public class MediatorPattern {

    public static void main(String[] args) {

        ConcreteMediator mediator = new ConcreteMediator();

        ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);

        ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

        mediator.setColleague1(colleague1);

        mediator.setColleague2(colleague2);

        colleague1.Send("How are you?");

        colleague2.Send("Fine, thank you. And you?");

        colleague1.Send("I'm fine. Thankes.");

運作結果

同僚2得到資訊:How are you?

同僚1得到資訊:Fine, thank you. And you?

同僚2得到資訊:I'm fine. Thankes.

應用場景

中介者模式一般用于定義良好但是互動較為負責的對象集合。産生的互相依賴關系是無結構化的并且難以了解。

和很多其他對象有引用關系以及互動的對象很難被重用。

想定制一個分布在多個類中的行為,而又不想生成太多的子類的場合。

 本文轉自靜默虛空部落格園部落格,原文連結:http://www.cnblogs.com/jingmoxukong/p/4238479.html,如需轉載請自行聯系原作者