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

在我們的日常生活中經(jīng)常需要購買各種各樣的東西匆瓜,房子奔则、車子蛮寂、生活用品等等。那么我們并不會(huì)對(duì)各個(gè)產(chǎn)品都了解易茬,所以銷售人員應(yīng)運(yùn)而生酬蹋,他們了解產(chǎn)品,然后他們根據(jù)你的需求在向你們推薦符合你們要求的產(chǎn)品抽莱。這些銷售人員就相當(dāng)于中介范抓,處于客戶和產(chǎn)品之間,為你們搭橋牽線食铐。這就是這篇需要講述的一個(gè)設(shè)計(jì)模式-中介者模式匕垫。

介紹

從程序方面來講,中介者模式就是各個(gè)對(duì)象封裝虐呻,使他們不需要相互直接引用象泵,而是通過中介者來通信寞秃。對(duì)于一個(gè)模塊,可能由很多對(duì)象構(gòu)成单芜,而且這些對(duì)象之間可能存在相互的引用蜕该,為了減少對(duì)象兩兩之間復(fù)雜的引用關(guān)系犁柜,使之成為一個(gè)松耦合的系統(tǒng)洲鸠,我們需要使用中介者模式,這就是中介者模式的模式動(dòng)機(jī)馋缅。

如下圖(圖片來自大話設(shè)計(jì)模式)

圖片來自大話設(shè)計(jì)模式

聯(lián)合國就相當(dāng)于中介者模式中的中介者
圖片來自大話設(shè)計(jì)模式

結(jié)構(gòu)圖

圖片來自網(wǎng)絡(luò)

案例

中介抽象類

public abstract class Mediator {
    public abstract void handleMsg(String msg,Colleague colleague);
}

抽象同事類

public abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
    
    public abstract void getMsg(String msg);
    
    public abstract void sendMsg(String msg);
}

房東類(具體同事類)

public class Landlord extends Colleague {

    public Landlord(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void getMsg(String msg) {
        System.out.println("我是一名房東,今天我收到一條消息:"+msg);
    }

    @Override
    public void sendMsg(String msg) {
        mediator.handleMsg(msg, this);
    }


}

租客類(具體同事類)

public class Renter extends Colleague {

    public Renter(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void getMsg(String msg) {
        System.out.println("我是一名租客,今天我收到一條消息:"+msg);
    }

    @Override
    public void sendMsg(String msg) {
        mediator.handleMsg(msg, this);
    }
}

房地產(chǎn)經(jīng)紀(jì)人中介類

public class Realtor extends Mediator {
    
    private Landlord landlord;
    private Renter renter;
    
    public void setLandlord(Landlord landlord) {
        this.landlord = landlord;
    }



    public void setRenter(Renter renter) {
        this.renter = renter;
    }



    @Override
    public void handleMsg(String msg, Colleague colleague) {
        //如果消息是房東發(fā)過來的扒腕,那就轉(zhuǎn)給租客,讓租客知道有人出租房屋
        if (colleague.equals(landlord)) {
            renter.getMsg(msg);
        }
        
        //如果消息是租客發(fā)過來的萤悴,說明租客已經(jīng)決定是否租賃房屋瘾腰,把消息給房東(現(xiàn)實(shí)中沒這必要。覆履。蹋盆。)
        if (colleague.equals(renter)) {
            landlord.getMsg(msg);
        }
    }

}

測(cè)試類

public class Client {
    
    public static void main(String[] args) {
        //中介
        Realtor realtor = new Realtor();
        
        //房東和租客同時(shí)找上了中介
        Landlord landlord = new Landlord(realtor);
        Renter renter = new Renter(realtor);
        
        realtor.setLandlord(landlord);
        realtor.setRenter(renter);
        
        landlord.sendMsg("有一套海景別墅要出租!!!");
        renter.sendMsg("太貴,租不起!");
    }

}

代碼見Github地址

總結(jié)

如果在一個(gè)系統(tǒng)中對(duì)象之間的聯(lián)系呈現(xiàn)為網(wǎng)狀結(jié)構(gòu)硝全,也就是存在大量的多對(duì)多聯(lián)系時(shí)就可以用中介者模式栖雾。通過使用中介者模式可以把原來的網(wǎng)狀結(jié)構(gòu)變成星形結(jié)構(gòu),最上面那兩張圖伟众,聯(lián)合國來作為中介析藕,處理各國的事務(wù)。
中介者模式可以使對(duì)象之間的關(guān)系數(shù)量急劇減少凳厢,而且還承擔(dān)這兩方面的作用账胧,一是中轉(zhuǎn)作用,而是協(xié)調(diào)作用先紫。通過中介者提供的中轉(zhuǎn)作用治泥,各個(gè)同事對(duì)象就不再需要顯式引用其他同事,當(dāng)需要和其他同事進(jìn)行通信時(shí)遮精,通過中介者即可居夹。中介者可以更進(jìn)一步的對(duì)同事之間的關(guān)系進(jìn)行封裝,同事可以一致地和中介者進(jìn)行交互仑鸥,而不需要指明中介者需要具體怎么做吮播,中介者根據(jù)封裝在自身內(nèi)部的協(xié)調(diào)邏輯,對(duì)同事的請(qǐng)求進(jìn)行進(jìn)一步處理眼俊,將同事成員之間的關(guān)系行為進(jìn)行分離和封裝意狠。
通過使用中介者模式可以降低了類的復(fù)雜度,將一對(duì)多轉(zhuǎn)化成了一對(duì)一疮胖,降低系統(tǒng)的耦合性环戈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闷板,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子院塞,更是在濱河造成了極大的恐慌遮晚,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拦止,死亡現(xiàn)場(chǎng)離奇詭異县遣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)汹族,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門萧求,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顶瞒,你說我怎么就攤上這事夸政。” “怎么了榴徐?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵守问,是天一觀的道長。 經(jīng)常有香客問我坑资,道長耗帕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任盐茎,我火速辦了婚禮兴垦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘字柠。我一直安慰自己探越,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布窑业。 她就那樣靜靜地躺著钦幔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪常柄。 梳的紋絲不亂的頭發(fā)上鲤氢,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音西潘,去河邊找鬼卷玉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喷市,可吹牛的內(nèi)容都是我干的相种。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼品姓,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寝并!你這毒婦竟也來了箫措?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤衬潦,失蹤者是張志新(化名)和其女友劉穎斤蔓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镀岛,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弦牡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哎媚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喇伯。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拨与,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艾猜,我是刑警寧澤买喧,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站匆赃,受9級(jí)特大地震影響淤毛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜算柳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一低淡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞬项,春花似錦蔗蹋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妥衣,卻和暖如春皂吮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背税手。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工蜂筹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芦倒。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓畜疾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咧虎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容