【設計模式Android】中介者模式

設計模式Android 其餘相關文章:
【設計模式Android】設計模式六大原則
【設計模式Android】代理模式javascript


定義:定義一箇中介對象來封裝系列對象之間的交互。中介者使各個對象不須要顯示地相互引用,從而使其耦合性鬆散,並且能夠獨立地改變他們之間的交互。java

中介者模式

中介者模式簡介

我在網上看到這樣一張圖,我以爲可以很好地說明中介者模式,因此我先借來用用。設計模式


這是班裏同窗之間的聯繫狀況。幾乎每一個人之間都有聯繫,錯綜複雜,每一個人之間均可以單獨聯繫的。
可是QQ羣誕生了,你們的關係就能夠成爲這樣了:


經過QQ羣把你們聯繫在一塊兒,而各我的之間是沒有聯繫的。
這樣作好嗎?
若是是現實生活固然不方便,你們之間都有私人的聯繫多方便。可是對於程序設計來講,就是太好的事了,由於根據以前提到過的六大原則,類與類之間的耦合性越低越好。若是咱們經過一個QQ羣下降了你們之間的聯繫,不就是下降了耦合。

代碼示例

廢話很少說,我先創建一個QQ(中介者)。ide

public abstract class AbstractMediator {
    public StudentA studentA;
    public StudentB studentB;
    public StudentC studentC;
    public AbstractMediator(){
        studentA = new StudentA(this);
        studentB = new StudentB(this);
        studentC = new StudentC(this);

    }

    public StudentA getStudentA() {
        return studentA;
    }

    public StudentB getStudentB() {
        return studentB;
    }

    public StudentC getStudentC() {
        return studentC;
    }

    public abstract void talk();
}複製代碼

實現:post

public class Mediator extends AbstractMediator{
    @Override
    public void talk() {
        studentA.talk();
        studentB.talk();
        studentC.talk();
    }
}複製代碼

先抽象一個學生類:ui

public abstract class AbstractStudent {
    public String name;
    public String content;
    public AbstractMediator mediator;
    public AbstractStudent(AbstractMediator mediator){
        this.mediator = mediator;
    }
    public abstract void talk();
}複製代碼

而後創建幾個學生StudentA,B,C,BC與A同樣,我這裏就寫一個便可:this

public class StudentA extends AbstractStudent{


    public StudentA(AbstractMediator mediator) {
        super(mediator);
        name ="aaa";
        content = "hello";
    }

    @Override
    public void talk() {
        System.out.printf(name+"對"+mediator.getStudentB().name+"說:"+content);
    }
}複製代碼

與代理模式的對比

當中介者中管理的類少的時候,總感受有些像代理模式,這實際上是因爲中介者模式是下降一些類之間耦合性,當只下降兩個類的耦合性時,寫法上跟代理模式就差很少了,可是基本思想仍是不同的。
中介者模式中各個類之間是平級的,StudentA,StudentB等,可是代理模式不是,其實解耦的兩個類應該是調用關係。spa

中介者模式的優缺點

中介者模式優勢不言而喻,下降耦合性,可是缺點就是會使程序變得臃腫,邏輯複雜。設計

相關文章
相關標籤/搜索