【设计模式系列】中介者模式 絮絮叨叨 概述 中介者模式的结构

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

絮絮叨叨

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

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

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

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

概述

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

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

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

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

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

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

中介者模式的结构

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
java复制代码package com.heiz.design.mediator;

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
java复制代码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类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
java复制代码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类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
java复制代码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("中介帮您解决~");
}
}

我们再简单测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
java复制代码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原则


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

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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%