Android設(shè)計(jì)模式——中介者模式

介紹

用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。

中介者模式包括以下角色:

抽象中介者(Mediator)角色:定義出同事對(duì)象到中介者對(duì)象的接口,其中主要方法是一個(gè)(或多個(gè))事件方法。

具體中介者(ConcreteMediator)角色:實(shí)現(xiàn)了抽象中介者所聲明的事件方法。具體中介者知曉所有的具體同事類,并負(fù)責(zé)具體的協(xié)調(diào)各同事對(duì)象的交互關(guān)系。

抽象同事類(Colleague)角色:定義出中介者到同事對(duì)象的接口。同事對(duì)象只知道中介者而不知道其余的同事對(duì)象。

具體同事類(ConcreteColleague)角色:所有的具體同事類均從抽象同事類繼承而來(lái)。實(shí)現(xiàn)自己的業(yè)務(wù),在需要與其他同事通信的時(shí)候,就與持有的中介者通信,中介者會(huì)負(fù)責(zé)與其他的同事交互。

示例圖如下:

中介者.png

中介者模式的簡(jiǎn)單示例

小明的店鋪主要是賣鍵盤和鼠標(biāo)以及組裝電腦,而顧客小紅想要買一臺(tái)組裝電腦,但是由于賣電腦的店鋪實(shí)在太多和里面水分太多,為了避免受騙,小紅去找了一家信譽(yù)很好的中介來(lái)幫忙處理。

抽象同事類Colleague角色,用于下面店鋪和顧客繼承

public abstract class Colleague {
    
    protected String name;
    protected Mediator mediator;
    
    Colleague(String name,Mediator mediator){
        this.name = name;
        this.mediator = mediator;
    }
}

具體同事類:顧客

public class Customer extends Colleague {
    
    public Customer(String name, Mediator mediator) {
        super(name, mediator);
    }

    /**
     * 與中介者聯(lián)系
     */
    public void constact(String message) {
        mediator.constact(message, this);
    }

    /**
     * 獲取信息
     */
    public void getMessage(String message) {
        System.out.println("顧客:" + name + ",  獲得信息:" + message);
    }
    
}

具體同事類:店鋪

public class Shop extends Colleague{
    
    public Shop(String name, Mediator mediator) {
        super(name, mediator);
    }

    /**
     * 與中介者聯(lián)系
     */
    public void constact(String message) {
        mediator.constact(message, this);
    }

    /**
     * 獲取信息
     */
    public void getMessage(String message) {
        System.out.println("店鋪:" + name + ",  獲得信息:" + message);
    }
}

抽象中介者Mediator角色,提供一個(gè)聯(lián)系的方法

public abstract class Mediator {
    //申明一個(gè)聯(lián)絡(luò)方法
    public abstract void constact(String message, Colleague colleague);
    
}

具體中介者,從代碼可以看出,中介者引入了所有的Colleague角色,然后在兩個(gè)具體Colleague角色中流轉(zhuǎn),封裝了一些交互操作。

public class MediatorStructure extends Mediator{
    
    private Customer customer;
    private Shop shop;

    
    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public Shop getShop() {
        return shop;
    }

    public void setShop(Shop shop) {
        this.shop = shop;
    }

    public void constact(String message, Colleague colleague) {
        
        if(colleague instanceof Customer){
            //顧客來(lái)詢問(wèn),中介去問(wèn)店鋪,店鋪獲得消息
            shop.getMessage(message);
        }
        else{
            //店鋪回復(fù),中介通知顧客,顧客獲得消息
            customer.getMessage(message);
        }
    }
}

顧客通過(guò)中介去拿到一份電腦組裝的清單,店鋪通過(guò)中介返回一份電腦清單給顧客。顧客與店鋪并沒(méi)有直接的引用關(guān)聯(lián),都是通過(guò)中介來(lái)實(shí)現(xiàn)。

public class Client {
    
    public static void main(String[] args) {
       
        //一個(gè)店鋪、一個(gè)顧客、一個(gè)中介
        MediatorStructure mediator = new MediatorStructure();
        
        //店鋪和顧客只需要知道中介即可
        Customer customer = new Customer("小紅", mediator);
        Shop shop = new Shop("小明", mediator);
        
        //中介要知道店鋪和顧客
        mediator.setCustomer(customer);
        mediator.setShop(shop);
        
        customer.constact("我想要組裝一臺(tái)電腦,價(jià)位在5k左右");
        shop.constact("好的!這是5k的配置信息,請(qǐng)查收...");
        
    }

}
輸出結(jié)果

店鋪:小明, 獲得信息:我想要組裝一臺(tái)電腦,價(jià)位在5k左右
顧客:小紅, 獲得信息:好的!這是5k的配置信息,請(qǐng)查收...

總結(jié)

中介者模式的優(yōu)點(diǎn)

  • 松散耦合
    中介者模式通過(guò)把多個(gè)同事對(duì)象之間的交互封裝到中介者對(duì)象里面,從而使得同事對(duì)象之間松散耦合,基本上可以做到互補(bǔ)依賴。這樣一來(lái),同事對(duì)象就可以獨(dú)立地變化和復(fù)用,而不再像以前那樣“牽一處而動(dòng)全身”了。
  • 集中控制交互
    多個(gè)同事對(duì)象的交互,被封裝在中介者對(duì)象里面集中管理,使得這些交互行為發(fā)生變化的時(shí)候,只需要修改中介者對(duì)象就可以了,當(dāng)然如果是已經(jīng)做好的系統(tǒng),那么就擴(kuò)展中介者對(duì)象,而各個(gè)同事類不需要做修改。
  • 多對(duì)多變成一對(duì)多
    沒(méi)有使用中介者模式的時(shí)候,同事對(duì)象之間的關(guān)系通常是多對(duì)多的,引入中介者對(duì)象以后,中介者對(duì)象和同事對(duì)象的關(guān)系通常變成雙向的一對(duì)多,這會(huì)讓對(duì)象的關(guān)系更容易理解和實(shí)現(xiàn)。

中介模式的缺點(diǎn)

中介者模式的一個(gè)潛在缺點(diǎn)是,過(guò)度集中化。如果同事對(duì)象的交互非常多,而且比較復(fù)雜,當(dāng)這些復(fù)雜性全部集中到中介者的時(shí)候,會(huì)導(dǎo)致中介者對(duì)象變得十分復(fù)雜,而且難于管理和維護(hù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容