JavaScript 中介者模式

200 阅读1分钟

是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

这个就很好理解了,就是房产中介什么的。
这里额外提一句 有没有觉得中介和代理很像。
但是:
代理是一对多的(一个请求者和多个接受者)
中介是多对多(多个请求者或多个接受者?我觉得中介模式中每个对象都是请求者的同时也都是接受者)。

class Mediary {
    constructor() {
        this.buyHouseList = []
        this.sellHouseList = []
    }
    
    addBuyHouse(buyHouse) {
        this.buyHouseList.push(buyHouse)
    }
    
    addSellHouse(sellHouse) {
        this.sellHouseList.push(sellHouse)
    }
    
    getMatchingSellHouse(buyHouse) {
        const price = buyHouse.getPrice()
        console.log('获取匹配的卖方:', '卖房价格低于或等于' ,price)
        return this.sellHouseList.filter(item => item.getPrice() <= price)
    }
    
    getMatchingBuyHouse(sellHouse) {
        const price = sellHouse.getPrice()
        console.log('获取匹配的买方:', '买房价格高于或等于', price)
        return this.buyHouseList.filter(item => item.getPrice() >= price)
    }
}

class BuyHouse {
    constructor(price) {
        this.price = price
    }
    
    getPrice() {
        return this.price
    }
    
    matchingSellHouse(mediary) {
        console.log('匹配到的卖房:', mediary.getMatchingSellHouse(this) )
    }
}

class SellHouse {
    constructor(price) {
        this.price = price
    }

    getPrice() {
        return this.price
    }
    
    matchingBuyHouse(mediary) {
        console.log( '匹配到的买房:', mediary.getMatchingBuyHouse(this) )
    }
}

const mediary = new Mediary()

const buyHouse1 = new BuyHouse(1000)
const buyHouse2 = new BuyHouse(2000)

const sellHouse1 = new SellHouse(1500)
const sellHouse2 = new SellHouse(2000)

mediary.addBuyHouse(buyHouse1)
mediary.addBuyHouse(buyHouse2)
mediary.addSellHouse(sellHouse1)
mediary.addSellHouse(sellHouse2)

buyHouse1.matchingSellHouse(mediary)
buyHouse2.matchingSellHouse(mediary)
sellHouse1.matchingBuyHouse(mediary)
sellHouse2.matchingBuyHouse(mediary)

返回结果:

获取匹配的卖方: 卖房价格低于或等于 1000
匹配到的卖房: []
获取匹配的卖方: 卖房价格低于或等于 2000
匹配到的卖房: [ SellHouse { price: 1500 }, SellHouse { price: 2000 } ]
获取匹配的买方: 买房价格高于或等于 1500
匹配到的买房: [ BuyHouse { price: 2000 } ]
获取匹配的买方: 买房价格高于或等于 2000
匹配到的买房: [ BuyHouse { price: 2000 } ]