中介者模式 悠悠 2021-07-24 21:38 376阅读 0赞 # 一 点睛 # 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。 如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,以及中介者,这样就减小了系统的耦合。一个好的设计,必定不会把所有的对象关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70] **定义** 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 # 二 结构 # 中介者模式包含以下主要角色: * 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 * 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。 * 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。 * 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。 # 三 实战 # ## 1 需求 ## 租房 现在租房基本都是通过房屋中介,房主将房屋托管给房屋中介,而租房者从房屋中介获取房屋信息。房屋中介充当租房者与房屋所有者之间的中介者。 ## 2 类图 ## ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 1] ## 3 代码 ## // 抽象中介者 public abstract class Mediator { // 申明一个联络方法 public abstract void constact(String message,Person person); } // 抽象同事类 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); } // 与中介者联系 public void constact(String message){ mediator.constact(message, this); } // 获取信息 public void getMessage(String message){ System.out.println("房主" + name +"获取到的信息:" + message); } } // 具体同事类 承租人 public class Tenant extends Person { public Tenant(String name, Mediator mediator) { super(name, mediator); } // 与中介者联系 public void constact(String message){ mediator.constact(message, this); } // 获取信息 public void getMessage(String message){ System.out.println("租房者" + name +"获取到的信息:" + message); } } // 中介机构 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; } public void constact(String message, Person person) { if (person == houseOwner) { //如果是房主,则租房者获得信息 tenant.getMessage(message); } else { //反正则是房主获得信息 houseOwner.getMessage(message); } } } // 测试类 public class Client { public static void main(String[] args) { // 一个房主、一个租房者、一个中介机构 MediatorStructure mediator = new MediatorStructure(); // 房主和租房者只需要知道中介机构即可 HouseOwner houseOwner = new HouseOwner("张三", mediator); Tenant tenant = new Tenant("李四", mediator); // 中介结构要知道房主和租房者 mediator.setHouseOwner(houseOwner); mediator.setTenant(tenant); tenant.constact("需要租三室的房子"); houseOwner.constact("我这有三室的房子,你需要租吗?"); } } ## 4 测试结果 ## 房主张三获取到的信息是:我要租三室的房子!!! 租房者李四获取到的信息是:我这里有三室的房子,你要租吗? # 四 优缺点 # **优点** * 松散耦合 中介者模式通过把多个同事对象之间的交互封装到中介者对象里面,从而使得同事对象之间松散耦合,基本上可以做到互补依赖。这样一来,同事对象就可以独立地变化和复用,而不再像以前那样“牵一处而动全身”了。 * 集中控制交互 多个同事对象的交互,被封装在中介者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改中介者对象就可以了,当然如果是已经做好的系统,那么就扩展中介者对象,而各个同事类不需要做修改。 * 一对多关联转变为一对一的关联 没有使用中介者模式的时候,同事对象之间的关系通常是一对多的,引入中介者对象以后,中介者对象和同事对象的关系通常变成双向的一对一,这会让对象的关系更容易理解和实现。 **缺点** 当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。 # 五 使用场景 # * 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。 * 当想创建一个运行于多个类之间的对象,又不想生成新的子类时。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70]: /images/20210724/f97116e4a8054b358246611fb9b8ff12.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 1]: /images/20210724/93c39572b6aa4a46baf89dde3545e05a.png
相关 java 中介者模式_java中介者模式 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和 小咪咪/ 2022年11月06日 10:50/ 0 赞/ 177 阅读
相关 中介者模式 一、什么是中介者模式 Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediat 小鱼儿/ 2022年07月28日 09:00/ 0 赞/ 33 阅读
相关 中介者模式 中介者模式 一、概述 1. 如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系极其复杂,这些对象称为同事对象 2. 我们可以引入 曾经终败给现在/ 2022年04月18日 06:29/ 0 赞/ 215 阅读
相关 中介者模式 > 中介者模式适用于,完成一件事情,需要多方面协同合作,而多方面之间的耦合性较紧密 有一个场景 采购部门要采购IBM的电脑,它根据以下两个要素来决定采购数量。 销售 Love The Way You Lie/ 2022年03月14日 15:42/ 0 赞/ 250 阅读
相关 中介者模式 ![1365950-20190529141650092-1838345438.png][] / 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介 柔光的暖阳◎/ 2021年12月21日 12:25/ 0 赞/ 258 阅读
相关 中介者模式 中介者模式:调停者模式 定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要相互引用,从而使其耦合松散,还可以独立地改变它们之间的交互。 中介者的职责:中转作用 不念不忘少年蓝@/ 2021年12月17日 13:55/ 0 赞/ 212 阅读
相关 中介者模式 一、前言 中介模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 妖狐艹你老母/ 2021年12月09日 00:53/ 0 赞/ 233 阅读
相关 中介者模式 中介者模式:用一个对象来封装一系列对象的交互。中介者使各对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互。 主要解决:对象与对象之间存在大量的关联 ゞ 浴缸里的玫瑰/ 2021年09月17日 04:42/ 0 赞/ 261 阅读
相关 中介者模式 22.中介者模式 public abstract class AbstractCardPartner// 抽象牌友类 { 分手后的思念是犯贱/ 2021年09月17日 00:08/ 0 赞/ 314 阅读
相关 中介者模式 一 点睛 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如 悠悠/ 2021年07月24日 21:38/ 0 赞/ 377 阅读
还没有评论,来说两句吧...