Java23种设计模式——19.行为型模式之中介者模式

Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  行为型模式  中的  中介者模式  !

中介者模式

先来百科一下,什么叫中介者模式

很好,又是没有任何的收获,这里我说一下啥叫中介者模式

中介者模式,顾名思义,肯定得先有一个中介者,也就是第三者,这个第三者主要是用来去做“维护的”

举例说明:好比我们找房子,我们不可能跑到一个城市到处找房子,因为我们不知道这个城市那里有空房子,在什么位置,如果一个一个去问,那这得问到什么时候,如果这时候有一个中介,他可以告诉我们那里有房子,这样我们是很省事的,并且如果房主修改了价格什么的,我们都可以直接就知道了消息。

中介者模式的定义与特点

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

中介者模式是一种对象行为型模式,其主要优点如下。

1. 降低了对象之间的耦合性,使得对象易于独立地被复用。

2. 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。

其主要缺点是:当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。

这里我再说一下迪米特法则

迪米特法则

迪米特法则的定义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

可以通俗的去说,就是我和微信还有银行卡之间的关系,我以前出门需要带很多银行卡,现在我只需要有一个微信就可以,直接通过微信支付,将我的钱扣除。

详细可以看我的博客:Java面向对象设计原则6——迪米特法则

中介者模式的结构与实现

1. 角色

我们先来看看有那些角色参与到这个模式中

1. 抽象中介者角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

2. 具体中介者角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。

3. 抽象同事类角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

4. 具体同事类角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

知道了角色之后,我们来写一个例子,这个例子就是这个房屋中介的例子

第一步:

我们先来定义一下,抽象中介者,这个其实就是房屋中介,我们还需要在这个抽象类中定义两个方法,就是用户注册和转发的方法

第二步:

我们再来去弄一个实现者,这里需要实现一下这两个方法

但是我们先不实现,先这样放着

第三步:

我们定义一个抽象的同事类,也就是客户

当然,光有这个不行,我们需要加点方法

当然,我们这个发送信息需要有中介,所以这里我们将房屋中介也定义进来,给一个set方法

第四步:

创建具体的实现同事类,这里我们就是指定的具体的用户了

我们弄个客户A和客户B

但是你在调用 repay 的时候会报错,这里我们去修改一下我们房屋中介的方法

OK

第五步:

再自己弄个客户B,调用的是和客户A中的代码一样

第六步:

这里我们开始写具体的中介者实现的业务代码了

我们首先需要一个 List 集合去将这些用户存储起来

然后我们开始写具体的业务代码,写之前我们可以看到啊,这个register 方法和 repay 的方法都没有我们的客户对象,这里呢,我们需要再去修改一下抽象中介的方法

接着,我们在 register 中将我们的客户存入到 list 中,并且调用 set 方法,将中介传入到具体的用户实现类中

接着我们再 repay 通知的时候,判断一下是不是当前对象,如果不是,我们就调用它的 receive 方法

测试:

我们先定义好我们的中介,然后定义两个客户,并且注册到这个中介中

然后我们让 a 发送一个 涨价

看一下结果

当然你这里可以作一下区分,比如说 A说:B接收:,这样可以分辨清楚

OK,就到这里,大家好好看一下。多多练习。有问题可以联系我QQ:2100363119

欢迎大家访问我的个人网站:lemon1234.com 感谢大家留言

猜你喜欢

转载自blog.csdn.net/weixin_45908370/article/details/109657682