【设计模式系列】中介者模式

这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

絮絮叨叨

朋友们好,我是小黑,我租的房子马上要到期了,今天趁着周末,去重新找房子。

想必在北京工作或者上学的朋友应该都知道,租房子这事儿可太难了,很难找到一个价格又便宜,通勤时间又短,房间装修又好的。比找到世界上最好的编程语言都难(PHP是最好的编程语言)。

因为我的同事朋友们也没有多余的房子出租,所以呢,没有条件直接和房东进行租赁交易,当然了,有些朋友会去一些小区找一些大爷大妈,找业主直租的,我呢比较怕麻烦,又怕被骗被坑,所以我都是直接找“某壳”、“某家”、“某爱某家”这样的公司,在他们的平台上找房,这些公式一般都被称之为中介,哈哈,说了这么多废话,终于把主题引出来啦。

没错,本期内容主要介绍【设计模式系列】中介者模式

概述

中介者设计模式是行为设计模式之一,用于降低系统中不同对象之间通信的耦合度和复杂度。

中介者设计模式在多个组件相互交互的应用程序中非常有用。

如果对象之间直接交互,则系统组件之间紧密耦合,这使得可维护性成本更高,并且不难扩展。

中介者式侧重于在对象之间提供用于通信的中介,并帮助实现对象之间的松散耦合。

就像我今天去租房这个例子,如果我和房东直接对接,那么对于我来说,首先不容易找到房东,房东也不容易找到我,然后我可能还要同时找多个房东,房东也有可能要和其他租客沟通看房谈价格,因为我不一定就会租嘛,整个交互模式大概是下面这样。

而中介就是为了专门解决租客和房东直接沟通(通信)的问题,来降低我和房东的沟通成本(耦合度和复杂度),沟通模式变成下面这样。

中介者模式的结构

结终者模式的结构相对来说还是比较简单的。在整个结构中,主要包含以下部分:

  • 通信对象(多个通信对象之间要互相通信)
  • 中介(处理各个对象之间的通信)

我们通过代码来实现以下我们这个结构。

首先不管是租客还是房东,他们首先得是人,中介我们这里先限定只能对人的租房需求进行处理。

所以我们先定义代表人类的抽象类Human:

package com.heiz.design.mediator;

/**
 * @author 小黑说Java
 * @ClassName Human
 * @Description 代表人类
 * @date 2021/11/27
 **/
public abstract class Human {
    public abstract void xuqiu();
}
复制代码

然定义一个代表租客的SocialLivestock类:

package com.heiz.design.mediator;

/**
 * @author 小黑说Java
 * @ClassName SocialLivestock
 * @Description 租客 (不要翻译了,类名是“社畜”)
 * @date 2021/11/27
 **/
public class SocialLivestock extends Human {
    @Override
    public void xuqiu() {
        System.out.println("租客:我要租一间小房子");
    }
}
复制代码

然后定义代表房东的Landlord类:

package com.heiz.design.mediator;

/**
 * @author 小黑说Java
 * @ClassName Landlord
 * @Description 房东
 * @date 2021/11/27
 **/
public class Landlord extends Human {
    @Override
    public void xuqiu() {
        System.out.println("我有一间房屋需要出租");
    }
}
复制代码

接下来定义代表中介的RoomMediator类:

package com.heiz.design.mediator;

/**
 * @author yuriy.lu
 * @ClassName RoomMediator
 * @Description 中介
 * @date 2021/11/27
 **/
public class RoomMediator {

    public void zulin(Human human) {
        human.xuqiu();
        System.out.println("中介帮您解决~");
    }
}
复制代码

我们再简单测试一下:

package com.heiz.design.mediator;

/**
 * @author 小黑说Java
 * @ClassName RoomMediatorTest
 * @Description
 * @date 2021/11/27
 **/
public class RoomMediatorTest {

    public static void main(String[] args) {
        Human landlord = new Landlord();
        Human socialLivestock = new SocialLivestock();

        RoomMediator roomMediator = new RoomMediator();
        roomMediator.zulin(landlord);
        roomMediator.zulin(socialLivestock);
    }

}
复制代码

执行程序,输出结果:

JDK中的中介者模式

  • java.util.Timer类的schedule()方法
  • JUC包中的Executor类的execute()方法
  • 反射包java.lang.reflectMethod类的 invoke()方法

小结

中介者模式主要是为了降低对象之间通信的复杂度,降低耦合度,各个类之间解耦,符合迪米特法则。

但是中介者模式也有缺点,就是当沟通逻辑复杂之后,中介类会变得特别复杂。

扩展阅读:Java中的SOLID原则


我是小黑,一个在互联网“苟且”的程序员。

流水不争先,贵在滔滔不绝

おすすめ

転載: juejin.im/post/7035273007987687460