国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設計模式之中介者模式

shixinzhang / 2701人閱讀

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

中介者模式

我們知道在程序中各個對象之間并不是完全獨立的,相互之間是可能存在關系的,并且可能會相互影響的,就像這樣。

很明顯這樣復雜的對象關系管理起來是很混亂的。但是如果我們把它改變成下面這個樣子可能就不太一樣了。

即通過一個中間對象分發通知,使各個對象之間得以解耦,從混亂的多對多關系變成了對象和中介者之間的多對一關系。每當我們要新增加一個功能或者對象的時候,只需要對中介者做一些改動即可。
中介者其實就像一個航空調度員一樣,如果有兩架飛機湊巧航線很近,起飛降落時間也很接近的話,調度員可能就會對其中一架飛機發起通知,告訴它改變航線,或者改變降落地點,以此來避免航空事故的發生。

5v5對戰

玩過LOL或者DATA的同學都知道,這是一個合作的游戲,每一個隊友的生死都關系著游戲的輸贏。我們要隨時觀察隊友的狀態,看看是不是少人,能否發起團戰,看看隊友的血量藍量,身為輔助的隊友可能要隨用加血加藍。當然這都不是最重要的,不怕神一樣的對手,就怕...一樣的隊友,哈哈哈。

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

輸出:

缺陷

使用中介者模式可以很大程度上避免對象之間的相互影響,無論是對于代碼的可讀性以及邏輯性都可以簡化。
但是不可否認的是它會創建新的對象占用一部分內存,而且這個對象隨著業務邏輯的增加會變得很龐大也可能導致難以維護。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81917.html

相關文章

  • 實用模式介者模式

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

    AlexTuan 評論0 收藏0
  • javascript介者模式

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

    LucasTwilight 評論0 收藏0
  • 設計模式介者模式

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

    jackwang 評論0 收藏0
  • 一起學設計模式 - 介者模式

    摘要:在地球上最大的中介者就是聯合國了,它主要用來維護國際和平與安全解決國際間經濟社會文化和人道主義性質的問題。所以對于關系比較復雜的系統,我們為了減少對象之間的關聯關系,使之成為一個松耦合系統,我們就需要使用中介者模式。 中介者模式(Mediator Pattern)屬于行為型模式的一種,用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨...

    denson 評論0 收藏0
  • 忘了再看設計模式-行為型

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

    ShevaKuilin 評論0 收藏0

發表評論

0條評論

shixinzhang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<