Mediator

將複雜的網狀關係變成由一個中介者來處理。

from: Mediator Pattern Tutorial with Java Examples

Example

Mediator

public abstract class Mediator {
    protected ConcreteColleague1 c1;
    protected ConcreteColleague2 c2;

    public ConcreteColleague1 getC1() {
        return c1;
    }

    public void setC1(ConcreteColleague1 c1) {
        this.c1 = c1;
    }

    public ConcreteColleague2 getC2() {
        return c2;
    }

    public void setC2(ConcreteColleague2 c2) {
        this.c2 = c2;
    }

    public abstract void doSomething1();
    public abstract void doSomething2();    
}
public class ConcreteMediator extends Mediator {
    @Override
    public void doSomething1() {
        super.c1.selfMethod1();
        super.c2.selfMethod2();
    }

    @Override
    public void doSomething2() {
        super.c1.selfMethod1();
        super.c2.selfMethod2();
    }
}

Colleague

public abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator _mediator) {
        this.mediator = _mediator;
    }
}
public class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator _mediator) {
        super(_mediator);
    }

    // 處理自已的業務
    public void selfMethod1() {};

    // 跟其他同事相關的業務 交由中介者處理
    public void depMethod1() {
        super.mediator.doSomething1();
    };
}

public class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator _mediator) {
        super(_mediator);
    }

    // 處理自已的業務
    public void selfMethod2() {};

    // 處理自已的業務和
    // 把跟其他同事相關的業務 交由中介者處理
    public void depMethod2() {
        super.mediator.doSomething2();
    };
}

from: 設計模式之禪