（1）概述中介者模式又称调停模式，定义一个中介者角色来封装一系列对象之间的交互，使原有对象之间的耦合松散，且可以独立的改变它们之间的交互（2）结构抽象中介者：它是中介者的接口，提供了同事对象注册与转发同事对象信息的抽象方法具体中介者：实现中介者接口，定义一个 List 来管理同事对象，协调各个同事对象之间的交互关系，须依赖于同事对象抽象同事类：定义同事类的接口，保存中介者对象，提供同事对象交互的抽象方法，实现所有相互影响的同事类的公共功能具体同事类：实现抽象同事类接口，当需要与其他同事对象交互时，由中介者对象负责后续的交互（3）案例以租房为例抽象中介者public abstract class Mediator { /** * 交流 * * @param message 信息 * @param person 抽象同事类 */ public abstract void contact(String message, Person person); }具体中介者public class MediatorStructure extends Mediator { //聚合房东、租房者 private HouseOwner houseOwner; private Tenant tenant; public HouseOwner getHouseOwner() { return houseOwner; } public void setHouseOwner(HouseOwner houseOwner) { this.houseOwner = houseOwner; } public Tenant getTenant() { return tenant; } public void setTenant(Tenant tenant) { this.tenant = tenant; } @Override public void contact(String message, Person person) { if (person == houseOwner) { tenant.getMessage(message); } else { houseOwner.getMessage(message); } } }抽象同事类public abstract class Person { protected String name; protected Mediator mediator; public Person(String name, Mediator mediator) { this.name = name; this.mediator = mediator; } }具体同事类public class HouseOwner extends Person { public HouseOwner(String name, Mediator mediator) { super(name, mediator); } /** * 与中介沟通 * * @param message 信息 */ public void contact(String message) { mediator.contact(message, this); } /** * 获取信息 * * @param message 信息 */ public void getMessage(String message) { System.out.println("房东获取到的信息：" + message); } } public class Tenant extends Person { public Tenant(String name, Mediator mediator) { super(name, mediator); } /** * 与中介沟通 * * @param message 信息 */ public void contact(String message) { mediator.contact(message, this); } /** * 获取信息 * * @param message 信息 */ public void getMessage(String message) { System.out.println("租房者获取到的信息：" + message); } }Clientpublic class Client { public static void main(String[] args) { //创建中介者 MediatorStructure mediatorStructure = new MediatorStructure(); //租房者 Tenant tenant = new Tenant("孙笑川", mediatorStructure); //房东 HouseOwner houseOwner = new HouseOwner("刘波", mediatorStructure); //中介需知道具体的租房者和房东 mediatorStructure.setTenant(tenant); mediatorStructure.setHouseOwner(houseOwner); tenant.contact("我要租房"); houseOwner.contact("我这里有"); } }（4）优缺点松散耦合：通过把多个同事对象之间的交互封装到中介者对象里面，从而使得同事对象之间松散耦合，可以做到互补依赖，同事对象也可以独立的变化和复用集中控制交互：多个同事对象的交互，被封装在中介者对象中集中管理，在交互发生变化的时候，只需修改中介者（或者进行扩展）一对多的关联转变为一对一：引入中介者之后，中介者与同事对象的关系变为双向一对一，使同事对象的关系易于理解和实现当同事类较多时，中介者的职责很重，结构复杂且难以维护（5）使用场景系统中对象间存在复杂的引用关系，系统结构混乱且难以理解需创建一个运行于多个类之间的对象，又不想生成新的子类时