中介者模式(Mediator)
定义:
定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
通俗解释:
网游中玩家进行装备买卖的话,都需要满世界喊话。比如求购 XX 装备,或者卖 XX 装备要的私聊这样。买家与卖家就变成了紧密耦合,所幸的是现在很多网游当中都有交易市场功能。这个交易市场就相当于一个中介者。买家和卖家不再直接联系,而是通过交易市场进行交易。在软件开发中有很多这种例子,比如 MVC 框架中,控制器(Controller)就是模型(Model)和视图(View)的中介者。早期的 JSP 开发中,Model 和 View 就是直接耦合在一起,在维护上面变得十分困难。这里的 Model 和 View 就像买家和卖家一样。有一句玩笑话就是在软件开发中没有增加一层抽象解决不了的问题。
代码:
中介类:市场类,用于沟通买家和卖家
public class Market {
private Queue<String> goods = new LinkedList<>();
// 通过市场卖出东西
public void sell(String good) {
goods.add(good);
}
// 通过市场买到东西
public String buy() {
return goods.poll();
}
}
卖家类:通过市场卖出商品
public class Seller {
public void sellToMarket(Market market) {
market.sell("商品A");
System.out.println("向市场卖出一个商品A!");
}
}
买家类:通过市场买入商品
public class Buyer {
public void buyFromMarket(Market market) {
System.out.println("从市场买入" + market.buy() + "!");
}
}
测试中介者:买家和卖家只与市场进行交互,通过市场消除他们之间的直接耦合。中介者模式很多变,只要消除两个对象的直接交互即可。
public class TestMediator {
public static void main(String[] args) {
// 市场类
Market market = new Market();
// 卖家
Seller seller = new Seller();
// 卖出两个商品
seller.sellToMarket(market);
seller.sellToMarket(market);
// 买家
Buyer buyer = new Buyer();
// 从市场买入两个商品
buyer.buyFromMarket(market);
buyer.buyFromMarket(market);
}
}
运行结果:
向市场卖出一个商品A!
向市场卖出一个商品A!
从市场买入商品A!
从市场买入商品A!
解析:
- 降低了类的复杂度,将一对多转化成了一对一。
- 各个类之间的解耦,符合迪米特原则。
- 中介者会随着系统内的类增多而变得复杂难以维护。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于