設計模式20——Mediator設計模式

Mediator中介者設計模式是經過一箇中介對象封裝一系列關於對象交互行爲. java

Mediator中介者設計模式中的角色以下: 設計模式

(1).中介者(Mediator):抽象定義了「同事」(colleagues,稍後有定義)們通訊的接口。 this

(2).具體中介者(Concrete Mediator):實現了「同事」間的通訊接口。 設計

(3).同事(Colleague):參與通訊的實體抽象。 code

(4).具體同事(Concrete Colleague):實現的參與通訊的實體。 對象

Mediator中介者設計模式結構以下: 接口

以私信聊天爲例來簡單演示Mediator中介者設計模式,例子代碼以下: string

//中介者
interface Mediator{
    public void send(String msg, Person person);
}


//具體中介者
class ConcreteMediator implements Mediator{
    //中介者所聯繫的交互對象
    private PersonA personA;
    private PersonA personB;

    public void setPersonA(PersonA  personA){
        this.personA = personA;
    }

    Public void setPersonB(PersonB personB){
        this.personB = personB;
    }

    public void send(String msg, Person person){
        if(person.equals(personA)){
            personA.greeting(msg);
        }else{
            personB.greeting(msg);
        }
    }
} 


//抽象同事
abstract class Person{
    //同事和中介者打交道
    protected Mediator mediator;
    public Person(Mediator mediator){
        this.mediator = mediator;
    }
}


//具體同事
class PersonA extends Person{
    public PersonA(Mediator mediator){
        super(mediator);
    }

    public void send(String msg){
        mediator.send(msg, this);
    }

    public void greeting(string msg){
        System.out.println(「PersonA: 」 + msg);
    }
} 


class PersonB extends Person{
    public PersonB(Mediator mediator){
        super(mediator);
    }

    public void send(String msg){
        mediator.send(msg, this);
    }

    public void greeting(string msg){
        System.out.println(「PersonB: 」 + msg);
    }
} 


public class MediatorDemo{
    public static void main(String[] args){
        //建立中介
        Mediator mediator = new ConcreteMediator();
        //建立同事,併爲同事設置中介
        Person personA = new PersonA(mediator);
        Person personB = new PersonB(mediator);

        //向中介設置同事
        mediator.setPersonA(personA);
        mediator.setPersonB(personB);

        //開始聊天
        personA.send(「Hi, B!」);
        personB.send(「Hello, A!」);
    }
}


在對象之間的交互操做很是多的狀況下;每一個對象的行爲操做均可能依賴不少其餘對象,修改一個對象的行爲的同時可能會影響到不少其餘對象的行爲,若是使用Mediator模式,能夠使各個對象間的耦合鬆散,只需關心和 Mediator的關係,使多對多的關係變成了一對多的關係,在下降系統複雜性的同時提升可修改擴展性.  class

相關文章
相關標籤/搜索