中介者设计模式大家都不模式,中介也很好理解,我们生活中也会碰到,比如房产中介之类的。
那么今天我们以房产中介和客户的例子来理解下中介者模式
一、中介者实现
首先,我们定义一个中介接口,他主要负责在客户之间传递消息
public interface Mediator { void send(Person src, String message); }
房产租赁市场上的人,有想租房的,也有往外租房的。他们互相是不认识的,也没有对方的联系方式,所有他们只能跟中介打交道
public abstract class Person { protected Mediator mediator; public Person(Mediator mediator) { this.mediator = mediator; } public abstract void send(String message); public abstract void accept(String message) ; }
实际中介的实现,他有买方和卖方的所有信息,我们这里只有一个买方和卖方,实际中应该是多对多的:
public class HouseAgency implements Mediator { private Person buyer; private Person seller; public void setBuyer(Person buyer) { this.buyer = buyer; } public void setSeller(Person seller) { this.seller = seller; } @Override public void send(Person src, String message) { System.out.println(src + " send:"+message ); if (src.equals(buyer)) { seller.accept(message); }else{ buyer.accept(message); } } }
真正的买方
public class Buyer extends Person { public Buyer(HouseAgency houseAgency) { super(houseAgency); } public void send(String message) { mediator.send(this, message); } public void accept(String message) { System.out.println(this.toString() + " accept:" + message); } @Override public String toString() { return "Buyer"; } }
卖方:
public class Seller extends Person { public Seller(HouseAgency houseAgency) { super(houseAgency); } public void send(String message) { mediator.send(this, message); } public void accept(String message) { System.out.println(this.toString() + " accept:" + message); } @Override public String toString() { return "Seller"; } }
买方和卖方通过中介者联系。所以他们都有中介的信息。
我们实现一次交流,卖方和买方都没有对方的信息,但他们通过中介实现了成功交易。
public class TestMain { public static void main(String[] args) { HouseAgency mediator = new HouseAgency(); Buyer buyer = new Buyer(mediator); Seller seller = new Seller(mediator); mediator.setBuyer(buyer); mediator.setSeller(seller); buyer.send("I like this house!"); seller.send("I can rent it to you!"); } }
输出:
Buyer send:I like this house! Seller accept:I like this house! Seller send:I can rent it to you! Buyer accept:I can rent it to you!
二、中介者应用场景
中介者在商品或者服务的交易市场最常出现,也叫经纪人。
因为大部分情况下,买东西的人不知道谁可以卖东西给他,卖东西的人不清楚谁需要我的商品。
这个时候就需要一个中介存在,这么理解那么JD、TB其实都算是中介。
1. 何时使用
- 多个类相互耦合,形成网状结构时
2. 方法
- 将网状结构分离为星型结构
3. 优点
- 减少类间依赖,降低了耦合
- 符合迪米特原则
4. 缺点
- 中介者会膨胀的很大,而且逻辑复杂
5. 使用场景
- 系统中对象之间存在比较复杂的引用关系
- 想通过一个中间类来封装多个类的行为,而又不想生成太多的子类