一.小结
-
定义:通过引入一个中介者来处理各个对象之间的通信,降低各个对象间的相互作用与耦合。
-
特点:降低类之间的耦合、将一对多软化为一对一关系;有些情景下中介者会很膨大很复杂。
-
通用UML类图如下:
-
常见形式:MVC/MVP架构、三层架构等;生活中租房中介、留学中介、网购等。
二.例子
最近刚好双十一时期,剁手狂潮哈哈。这里以网购为例,我们通过淘宝京东购买物品,淘宝京东平台充当一个中介,承担着买家与卖家的交易。代码Demo如下
//1.封装各个同事角色之间的依赖行为
public interface IDeal {
// 买卖交易
void shopDeal();
}
// 2.买家和卖家两个同事角色,各自具有自己的自发行为,同时也有相互的依赖行为
public class Saler implements IDeal {
// 自发行为,与买家无关
public void discount() {
System.out.println("趁着双十一来波促销");
}
// 依赖行为,与买家有关
@Override
public void shopDeal() {
System.out.println("卖出台MAC,销售额+2w元");
}
// 自发行为,与买家无关
public void total() {
System.out.println("今年双十一下单10w,销售额为2000w元,赚发了!");
}
}
public class Shopper implements IDeal {
public Shopper() {
}
// 自发行为,与卖家无关
public void think() {
System.out.println("双十一了啊...对自己好点吧!");
}
// 依赖行为,与卖家有关
@Override
public void shopDeal() {
System.out.println("买台MAC,存款-2w元");
}
// 自发行为,与卖家无关
public void after() {
System.out.println("又要吃土了呜呜呜~");
}
}
// 3.中介者处理同事角色间的依赖行为
public class TaoBao {
public void shopDeal(Shopper shopper, Saler saler) {
shopper.shopDeal();
saler.shopDeal();
}
}
// 4.情景类
public class Client {
public static void main(String[] args) {
// -----购买前纠结
Saler saler = new Saler();
saler.discount();
Shopper shopper = new Shopper();
shopper.think();
// -----剁手一直爽
TaoBao taoBao = new TaoBao();
taoBao.shopDeal(shopper, saler);
// -----钱包火葬场
shopper.after();
}
}