中介者模式的作用就是解决对象与对象之间错综复杂的交互关系,增加一个中介者以后,所有相关的对象都通过中介者对象来通信,当一个对象发生改变后,只需要通知中介者对象即可。
1、一个卖主,多个买主
假设有卖家A有一套面积:100平米,价格:20000元/平米的房子急需出售,他目前知道有三个买主在找房,对应关系如图:
通过代码实现卖家找买家:
// 卖家类
var Seller = function (name, info) {
this.name = name;
this.info = info;
}
// 卖家找买家的函数
Seller.prototype.match = function (buyer) {
// 定义买家要求
const buyerDemand = buyer.demand;
// 获取需求数字
const reg = /\d+/
// 1、买家的要求
let buyerRequestArea = buyerDemand.area.match(reg);
buyerRequestArea = parseInt(buyerRequestArea);
let buyerRequestprice = buyerDemand.price.match(reg);
buyerRequestprice = parseInt(buyerRequestprice);
// 2、卖家的条件
let sellerOwnArea = this.info.area.match(reg);
sellerOwnArea = parseInt(sellerOwnArea);
let sellerOwnprice = this.info.price.match(reg);
sellerOwnprice = parseInt(sellerOwnprice);
return sellerOwnArea >= buyerRequestArea && sellerOwnprice <= buyerRequestprice;
}
// 买家类
var Buyer = function (name, demand) {
this.name = name;
this.demand = demand;
}
// 定义卖家
var sellA = new Seller('卖家A', {
area: '100平米', // 卖家尺寸
price: '20000元/平米' // 卖家要价
});
var buyerX = new Buyer('买家X', {
area: '110平米', // 买家要求尺寸
price: '10000元/平米' // 买家最高愿意支付
})
var buyerY = new Buyer('买家Y', {
area: '120平米', // 买家要求尺寸
price: '30000元/平米' // 买家最高愿意支付
})
var buyerZ = new Buyer('买家Z', {
area: '99平米', // 买家要求尺寸
price: '30000元/平米' // 买家最高愿意支付
})
// 卖家开始找买主
console.log(sellA.match(buyerX)); // true:没找到
console.log(sellA.match(buyerY)); // true:没找到
console.log(sellA.match(buyerZ)); // true:找到了
当前例子中,先定义卖家类,并为卖家定义match方法去匹配买家,如果其售卖面积大于买家要求,且售卖价格低于买家最高愿意支付,我们认为该买主是意向客户。
当前例子中刚好找到第三个买家Z的时候,就找到了。但是实际情况可能是找了几十个也没找到合适的意向客户。
2、多个卖主,多个买主
假设又有卖主B和卖主C也加入了卖方行列中,此时的对应关系如图:
如果,我们依然按照以上的方式为卖主B和卖主C寻找买主,那么,此时的对应关系就已经开始复杂起来。如果有成千上万个卖主和买主在进行交易的匹配,交易状况就更加复杂,一个卖主可能会和几十个买主沟通筛选,一个买主也可能和几十个卖主沟通筛选。
这个时候,就有必要通过中介者模式进行改造了,为了展示主要逻辑,以下去掉价格和平米单价的单位。
// 卖家类
var Seller = function (name, info) {
this.name = name;
this.info = info;
}
// 买家类
var Buyer = function (name, demand) {
this.name = name;
this.demand = demand;
}
// 引入中介者
var broker = (function () {
var sellerList = [];
var buyerList = [];
var operations = {}
operations.addSellers = function (seller) {
sellerList.push(seller)
}
operations.addBuyers = function (buyer) {
buyerList.push(buyer)
}
operations.findBuyer = function (seller) {
const result = []
// 遍历所有的买家
buyerList.map(v => {
console.log(v.demand, seller);
if (seller.info.price <= v.demand.price && seller.info.area >= v.demand.area) {
result.push(v);
}
})
return result
}
operations.findSeller = function (buyer) {
const result = []
// 遍历所有的买家
sellerList.map(v => {
if (v.info.price <= buyer.demand.price && v.info.area >= buyer.demand.area) {
result.push(v);
}
})
return result;
}
return operations;
})()
// 定义卖家,并将其添加到中介者卖家列表中
var sellA = new Seller('卖家A', {
area: 100, // 卖家尺寸
price: 20000 // 卖家要价
});
var sellB = new Seller('卖家B', {
area: 90, // 卖家尺寸
price: 18000 // 卖家要价
});
var sellC = new Seller('卖家C', {
area: 120, // 卖家尺寸
price: 22000 // 卖家要价
});
broker.addSellers(sellA)
broker.addSellers(sellB)
broker.addSellers(sellC)
// 定义买家,并将其添加到中介者买家列表中
var buyerX = new Buyer('买家X', {
area: 110, // 买家要求尺寸
price: 10000 // 买家最高愿意支付
})
var buyerY = new Buyer('买家Y', {
area: 80, // 买家要求尺寸
price: 30000 // 买家最高愿意支付
})
var buyerZ = new Buyer('买家Z', {
area: 100, // 买家要求尺寸
price: 30000 // 买家最高愿意支付
})
broker.addBuyers(buyerX)
broker.addBuyers(buyerY)
broker.addBuyers(buyerZ)
例子中,我们除了定义卖家类和买家类,我们还引入了中介者,中介者拥有卖家信息列表,也拥有买家信息列表。当有卖家需要卖方时,可以将房屋信息和个人姓名留给中介者,中介者将其推入到卖家信息列表中。当有买家需要买房时,可以将购买需求留给中介者,中介者将其推入到买家需求列表中。
有一天,卖家A告诉中介者,他着急用钱,他的房子着急出手。于是中介者开始帮其寻找买主:
var buyers = broker.findBuyer(sellA)
有一天,买家Z告诉中介者,他现在手头有钱了,想全款买套房。于是中介者开始帮其寻找买主:
var sellers = broker.findSeller(buyerZ)
总结
我们发现,引入中介者以后,卖家和买家再也不用去为寻找买家或者卖家而烦恼,中介者拥有大量的卖主和买主信息,为其快速精准匹配。这大概也是中介这个职业兴起,并且长盛不衰的原因之一。