摘要:用中介者模式實現(xiàn)土豆饅頭豆包地瓜土豆饅頭豆包地瓜土豆饅頭輸出缺陷使用中介者模式可以很大程度上避免對象之間的相互影響,無論是對于代碼的可讀性以及邏輯性都可以簡化。
中介者模式
我們知道在程序中各個對象之間并不是完全獨立的,相互之間是可能存在關(guān)系的,并且可能會相互影響的,就像這樣。
很明顯這樣復(fù)雜的對象關(guān)系管理起來是很混亂的。但是如果我們把它改變成下面這個樣子可能就不太一樣了。
即通過一個中間對象分發(fā)通知,使各個對象之間得以解耦,從混亂的多對多關(guān)系變成了對象和中介者之間的多對一關(guān)系。每當(dāng)我們要新增加一個功能或者對象的時候,只需要對中介者做一些改動即可。
中介者其實就像一個航空調(diào)度員一樣,如果有兩架飛機(jī)湊巧航線很近,起飛降落時間也很接近的話,調(diào)度員可能就會對其中一架飛機(jī)發(fā)起通知,告訴它改變航線,或者改變降落地點,以此來避免航空事故的發(fā)生。
玩過LOL或者DATA的同學(xué)都知道,這是一個合作的游戲,每一個隊友的生死都關(guān)系著游戲的輸贏。我們要隨時觀察隊友的狀態(tài),看看是不是少人,能否發(fā)起團(tuán)戰(zhàn),看看隊友的血量藍(lán)量,身為輔助的隊友可能要隨用加血加藍(lán)。當(dāng)然這都不是最重要的,不怕神一樣的對手,就怕...一樣的隊友,哈哈哈。
用中介者模式實現(xiàn)class Player { constructor(name, color, status) { this.name = name this.color = color this.status = status } rebirth(name) { console.log(`${name}: rebirth`) agent.receiveMessage("playerRebirth", this) } die(name) { console.log(`${name}: died`) agent.receiveMessage("playerDead", this) } win() { console.log(`${this.name}: win`) } lose() { console.log(`${this.name}: lose`) } } const allPlayer = { } const agent = { playerRebirth (player) { allPlayer[player.color] = allPlayer[player.color] || {} allPlayer[player.color][player.name] = player }, playerDead (player) { allPlayer[player.color][player.name].status = "die" let allDead = true Object.keys(allPlayer[player.color]).map((member) => { if (allPlayer[player.color][member].status === "live") { allDead = false } }) if (allDead) { Object.keys(allPlayer[player.color]).map((member) => { allPlayer[player.color][member].lose() }) Object.keys(allPlayer).map((team) => { if (team !== player.color) { Object.keys(allPlayer[team]).map((member) => { allPlayer[team][member].win() }) } }) } }, receiveMessage() { const message = Array.prototype.shift.call(arguments) agent[message].apply(this, arguments) } } const player1 = new Player("土豆", "red", "live") const player2 = new Player("饅頭", "red", "live") const player3 = new Player("豆包", "blue", "live") const player4 = new Player("地瓜", "blue", "live") player1.rebirth("土豆") player2.rebirth("饅頭") player3.rebirth("豆包") player4.rebirth("地瓜") console.log(allPlayer, "all member be ready") player1.die("土豆") player2.die("饅頭") console.log(allPlayer, "one team is lose")
輸出:
使用中介者模式可以很大程度上避免對象之間的相互影響,無論是對于代碼的可讀性以及邏輯性都可以簡化。
但是不可否認(rèn)的是它會創(chuàng)建新的對象占用一部分內(nèi)存,而且這個對象隨著業(yè)務(wù)邏輯的增加會變得很龐大也可能導(dǎo)致難以維護(hù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/81917.html
摘要:好,師傅我們要學(xué)習(xí)帝吧人民,進(jìn)能打,退能刷淘寶。恩,大致過程就是這樣,我們使用中介者模式想一想。首先,數(shù)據(jù)需要放在中介者模式內(nèi),用戶的一切操作,都會傳遞給中介者模式,由他來選擇是哪一個部分發(fā)生改變。 俗話說,一個模式三個坑。 中介者模式應(yīng)該算最坑的一個模式,坑不在于他的原理。而在于他的名字和其他模式的使用,真尼瑪像。首先,中介者 好像是一切模式里面都有的一個東西,比如,享元模式中-元對...
摘要:中介者模式中介者模式對象和對象之間借助第三方中介者進(jìn)行通信。將就用下這個這個函數(shù)充當(dāng)中介者挑戰(zhàn)成功挑戰(zhàn)失敗選手選手選手選手挑戰(zhàn)成功選手挑戰(zhàn)成功選手挑戰(zhàn)失敗在這段代碼中之間沒有直接發(fā)生關(guān)系而是通過另外的對象建立鏈接姑且將之當(dāng)成是中介者模式了。 中介者模式 中介者模式: 對象和對象之間借助第三方中介者進(jìn)行通信。 showImg(https://segmentfault.com/img/bV...
摘要:中介者模式的應(yīng)用中介者模式的優(yōu)點就是減少類間的依賴,將一對多的依賴變成一對一的依賴,降低耦合,符合迪米特法則。中介者模式適用于多個對象之間出現(xiàn)緊密聯(lián)系,類圖成網(wǎng)狀結(jié)構(gòu),使用中介者模式可以梳理為星型結(jié)構(gòu),有助于理解其關(guān)系。 前言 由于最近瘋狂加班,博客都停更許久,難過~.~ 中介者模式定義 用一個中介對象封裝一系列的對象交互,中介者使各對象不需要顯示地相互作用,從而使其耦合松散,而且可以...
摘要:在地球上最大的中介者就是聯(lián)合國了,它主要用來維護(hù)國際和平與安全解決國際間經(jīng)濟(jì)社會文化和人道主義性質(zhì)的問題。所以對于關(guān)系比較復(fù)雜的系統(tǒng),我們?yōu)榱藴p少對象之間的關(guān)聯(lián)關(guān)系,使之成為一個松耦合系統(tǒng),我們就需要使用中介者模式。 中介者模式(Mediator Pattern)屬于行為型模式的一種,用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨...
摘要:推文用設(shè)計模式解構(gòu)三國是一種什么體驗行為型設(shè)計模式一策略模式工廠模式優(yōu)化結(jié)構(gòu)狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機(jī)與狀態(tài)模式責(zé)任鏈模式多個對象依次處理請求前者指定后者。代理模式代理針對一個對象,為了增加控制等中介雙方都是多個,為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現(xiàn)金[Concrete Stra...
閱讀 1030·2021-11-24 09:39
閱讀 3472·2021-10-27 14:20
閱讀 2374·2019-08-30 14:08
閱讀 3443·2019-08-29 16:34
閱讀 2252·2019-08-26 12:14
閱讀 2163·2019-08-26 11:54
閱讀 2843·2019-08-26 11:44
閱讀 2533·2019-08-26 11:38