这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
絮絮叨叨
朋友们好,我是小黑,我租的房子马上要到期了,今天趁着周末,去重新找房子。
想必在北京工作或者上学的朋友应该都知道,租房子这事儿可太难了,很难找到一个价格又便宜,通勤时间又短,房间装修又好的。比找到世界上最好的编程语言都难(PHP是最好的编程语言)。
因为我的同事朋友们也没有多余的房子出租,所以呢,没有条件直接和房东进行租赁交易,当然了,有些朋友会去一些小区找一些大爷大妈,找业主直租的,我呢比较怕麻烦,又怕被骗被坑,所以我都是直接找“某壳”、“某家”、“某爱某家”这样的公司,在他们的平台上找房,这些公式一般都被称之为中介,哈哈,说了这么多废话,终于把主题引出来啦。
没错,本期内容主要介绍【设计模式系列】的中介者模式。
概述
中介者设计模式是行为设计模式之一,用于降低系统中不同对象之间通信的耦合度和复杂度。
中介者设计模式在多个组件相互交互的应用程序中非常有用。
如果对象之间直接交互,则系统组件之间紧密耦合,这使得可维护性成本更高,并且不难扩展。
中介者式侧重于在对象之间提供用于通信的中介,并帮助实现对象之间的松散耦合。
就像我今天去租房这个例子,如果我和房东直接对接,那么对于我来说,首先不容易找到房东,房东也不容易找到我,然后我可能还要同时找多个房东,房东也有可能要和其他租客沟通看房谈价格,因为我不一定就会租嘛,整个交互模式大概是下面这样。
而中介就是为了专门解决租客和房东直接沟通(通信)的问题,来降低我和房东的沟通成本(耦合度和复杂度),沟通模式变成下面这样。
中介者模式的结构
结终者模式的结构相对来说还是比较简单的。在整个结构中,主要包含以下部分:
- 通信对象(多个通信对象之间要互相通信)
- 中介(处理各个对象之间的通信)
我们通过代码来实现以下我们这个结构。
首先不管是租客还是房东,他们首先得是人,中介我们这里先限定只能对人的租房需求进行处理。
所以我们先定义代表人类的抽象类Human:
1 | java复制代码package com.heiz.design.mediator; |
然定义一个代表租客的SocialLivestock类:
1 | java复制代码package com.heiz.design.mediator; |
然后定义代表房东的Landlord类:
1 | java复制代码package com.heiz.design.mediator; |
接下来定义代表中介的RoomMediator类:
1 | java复制代码package com.heiz.design.mediator; |
我们再简单测试一下:
1 | java复制代码package com.heiz.design.mediator; |
执行程序,输出结果:
JDK中的中介者模式
java.util.Timer
类的schedule()
方法- JUC包中的
Executor
类的execute()
方法 - 反射包
java.lang.reflect
中Method
类的invoke()
方法
小结
中介者模式主要是为了降低对象之间通信的复杂度,降低耦合度,各个类之间解耦,符合迪米特法则。
但是中介者模式也有缺点,就是当沟通逻辑复杂之后,中介类会变得特别复杂。
扩展阅读:Java中的SOLID原则
我是小黑,一个在互联网“苟且”的程序员。
流水不争先,贵在滔滔不绝
本文转载自: 掘金