成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

shixinzhang / 2711人閱讀

摘要:用中介者模式實(shí)現(xiàn)土豆饅頭豆包地瓜土豆饅頭豆包地瓜土豆饅頭輸出缺陷使用中介者模式可以很大程度上避免對(duì)象之間的相互影響,無(wú)論是對(duì)于代碼的可讀性以及邏輯性都可以簡(jiǎn)化。

中介者模式

我們知道在程序中各個(gè)對(duì)象之間并不是完全獨(dú)立的,相互之間是可能存在關(guān)系的,并且可能會(huì)相互影響的,就像這樣。

很明顯這樣復(fù)雜的對(duì)象關(guān)系管理起來(lái)是很混亂的。但是如果我們把它改變成下面這個(gè)樣子可能就不太一樣了。

即通過一個(gè)中間對(duì)象分發(fā)通知,使各個(gè)對(duì)象之間得以解耦,從混亂的多對(duì)多關(guān)系變成了對(duì)象和中介者之間的多對(duì)一關(guān)系。每當(dāng)我們要新增加一個(gè)功能或者對(duì)象的時(shí)候,只需要對(duì)中介者做一些改動(dòng)即可。
中介者其實(shí)就像一個(gè)航空調(diào)度員一樣,如果有兩架飛機(jī)湊巧航線很近,起飛降落時(shí)間也很接近的話,調(diào)度員可能就會(huì)對(duì)其中一架飛機(jī)發(fā)起通知,告訴它改變航線,或者改變降落地點(diǎn),以此來(lái)避免航空事故的發(fā)生。

5v5對(duì)戰(zhàn)

玩過LOL或者DATA的同學(xué)都知道,這是一個(gè)合作的游戲,每一個(gè)隊(duì)友的生死都關(guān)系著游戲的輸贏。我們要隨時(shí)觀察隊(duì)友的狀態(tài),看看是不是少人,能否發(fā)起團(tuán)戰(zhàn),看看隊(duì)友的血量藍(lán)量,身為輔助的隊(duì)友可能要隨用加血加藍(lán)。當(dāng)然這都不是最重要的,不怕神一樣的對(duì)手,就怕...一樣的隊(duì)友,哈哈哈。

用中介者模式實(shí)現(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")

輸出:

缺陷

使用中介者模式可以很大程度上避免對(duì)象之間的相互影響,無(wú)論是對(duì)于代碼的可讀性以及邏輯性都可以簡(jiǎn)化。
但是不可否認(rèn)的是它會(huì)創(chuàng)建新的對(duì)象占用一部分內(nèi)存,而且這個(gè)對(duì)象隨著業(yè)務(wù)邏輯的增加會(huì)變得很龐大也可能導(dǎo)致難以維護(hù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81917.html

相關(guān)文章

  • 實(shí)用模式介者模式

    摘要:好,師傅我們要學(xué)習(xí)帝吧人民,進(jìn)能打,退能刷淘寶。恩,大致過程就是這樣,我們使用中介者模式想一想。首先,數(shù)據(jù)需要放在中介者模式內(nèi),用戶的一切操作,都會(huì)傳遞給中介者模式,由他來(lái)選擇是哪一個(gè)部分發(fā)生改變。 俗話說(shuō),一個(gè)模式三個(gè)坑。 中介者模式應(yīng)該算最坑的一個(gè)模式,坑不在于他的原理。而在于他的名字和其他模式的使用,真尼瑪像。首先,中介者 好像是一切模式里面都有的一個(gè)東西,比如,享元模式中-元對(duì)...

    AlexTuan 評(píng)論0 收藏0
  • javascript介者模式

    摘要:中介者模式中介者模式對(duì)象和對(duì)象之間借助第三方中介者進(jìn)行通信。將就用下這個(gè)這個(gè)函數(shù)充當(dāng)中介者挑戰(zhàn)成功挑戰(zhàn)失敗選手選手選手選手挑戰(zhàn)成功選手挑戰(zhàn)成功選手挑戰(zhàn)失敗在這段代碼中之間沒有直接發(fā)生關(guān)系而是通過另外的對(duì)象建立鏈接姑且將之當(dāng)成是中介者模式了。 中介者模式 中介者模式: 對(duì)象和對(duì)象之間借助第三方中介者進(jìn)行通信。 showImg(https://segmentfault.com/img/bV...

    LucasTwilight 評(píng)論0 收藏0
  • 設(shè)計(jì)模式介者模式

    摘要:中介者模式的應(yīng)用中介者模式的優(yōu)點(diǎn)就是減少類間的依賴,將一對(duì)多的依賴變成一對(duì)一的依賴,降低耦合,符合迪米特法則。中介者模式適用于多個(gè)對(duì)象之間出現(xiàn)緊密聯(lián)系,類圖成網(wǎng)狀結(jié)構(gòu),使用中介者模式可以梳理為星型結(jié)構(gòu),有助于理解其關(guān)系。 前言 由于最近瘋狂加班,博客都停更許久,難過~.~ 中介者模式定義 用一個(gè)中介對(duì)象封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯示地相互作用,從而使其耦合松散,而且可以...

    jackwang 評(píng)論0 收藏0
  • 一起學(xué)設(shè)計(jì)模式 - 介者模式

    摘要:在地球上最大的中介者就是聯(lián)合國(guó)了,它主要用來(lái)維護(hù)國(guó)際和平與安全解決國(guó)際間經(jīng)濟(jì)社會(huì)文化和人道主義性質(zhì)的問題。所以對(duì)于關(guān)系比較復(fù)雜的系統(tǒng),我們?yōu)榱藴p少對(duì)象之間的關(guān)聯(lián)關(guān)系,使之成為一個(gè)松耦合系統(tǒng),我們就需要使用中介者模式。 中介者模式(Mediator Pattern)屬于行為型模式的一種,用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)...

    denson 評(píng)論0 收藏0
  • 忘了再看設(shè)計(jì)模式-行為型

    摘要:推文用設(shè)計(jì)模式解構(gòu)三國(guó)是一種什么體驗(yàn)行為型設(shè)計(jì)模式一策略模式工廠模式優(yōu)化結(jié)構(gòu)狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機(jī)與狀態(tài)模式責(zé)任鏈模式多個(gè)對(duì)象依次處理請(qǐng)求前者指定后者。代理模式代理針對(duì)一個(gè)對(duì)象,為了增加控制等中介雙方都是多個(gè),為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現(xiàn)金[Concrete Stra...

    ShevaKuilin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<