蘇阿細 - 中介者模式
type: channel
link: https://www.wangchouchou.com/tag/%E4%B8%AD%E4%BB%8B%E8%80%85%E6%A8%A1%E5%BC%8F/
items: 行为型模式-中介者模式

行为型模式-中介者模式
type: item
date: 2022-09-19T15:15:00+00:00
description: （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 …