桥接模式之消息发送:结婚发消息不是一件简单的事情 - 第353篇

网友投稿 266 2022-10-22


桥接模式之消息发送:结婚发消息不是一件简单的事情 - 第353篇

桥接模式基本概念

用来解决上述问题的一个合理的解决方案,就是使用桥接模式(Bridge)。那么什么是桥接模式呢?

一、桥接(Bridge)模式基本概念

1.1 定义

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

在上面的例子中我们之前分析了有两个维度:发送消息的方式和消息的类型。

消息的类型:普通消息,加急消息、特急消息。

1.2 应用桥接模式来解决的思路

这两个纬度一共可以组合出9种不同的可能性来(3x3=9)。

我们在前面的编码问题就是:消息的抽象和实现是混杂在一起的,这就导致了,一个纬度的变化,会引起另一个纬度进行相应的变化,从而使得程序扩展起来非常困难。

在桥接模式中解决的思路就是:把这两个纬度分开,也就是将抽象部分和实现部分分开,让它们相互独立,这样就可以实现独立的变化,使扩展变得简单。

桥接模式通过引入实现的接口,把实现部分从系统中分离出去;那么,抽象这边如何使用具体的实现呢?肯定是面向实现的接口来编程了,为了让抽象这边能够很方便的与实现结合起来,把顶层的抽象接口改成抽象类,在里面持有一个具体的实现部分的实例。

这样一来,对于需要发送消息的客户端而言,就只需要创建相应的消息对象,然后调用这个消息对象的方法就可以了,这个消息对象会调用持有的真正的消息发送方式来把消息发送出去。也就是说客户端只是想要发送消息而已,并不想关心具体如何发送。

1.3 类图

1.4 主要角色

(1)抽象类(Abstraction):维护了Implementor即他的实现类,二者是聚合关系,Abstraction充当桥接类。

(2)扩展抽象类(RefinedAbstraction):扩展抽象部分的接口,可以有多个。

(3)实现接口(Implementor):定义实现部分的接口

(4)具体实现(ConcreteImplementor):Implementor接口的具体实现,可以有多个。

到这里我们对于桥接模式有了一个基本的了解,接下来我们用这个模式对于我们之前的代码进行优化。

桥接模式之消息发送

在上面我们对于桥接模式的定义有了一个基本的了解,接下来我们要重构我们之前的代码。

一、消息发送4.0:桥接模式

接下来我们根据桥接模式的定义来进行编码,主要分为两大部分抽象部分和实现部分。我们看下最终完成的类图:

1.1 实现接口(Implementor)

实现部分这里的例子中就是定义消息发送方式的一个接口即可,这里取名为MessageImplementor:

1.2 具体实现(ConcreteImplementor)

手机短信发送方式-SMSMessage:

1.3 抽象类(Abstraction)

在例子中抽象部分就是消息的类型:普通消息、加急消息、特急消息。

AbstractMessage:

1.4 扩展抽象类(RefinedAbstraction)

这里看下普通消息和加急消息的:

普通消息方式-CommonMessage:

加急消息方式-UrgencyMessage:

1.5 小测

到这里我们就可以进行测试一下了:

打印结果:

要想使用手机短信发送替换到具体的实现类即可。

1.6 添加新的消息类型:加入特急消息

那我们看看桥接模式是否可以解决我们上面碰到的问题:一个维度的变化会影响另外一个维度变化。

我们现在要加入特急消息,只需要定义新的扩展抽象类即可,然后可以进行使用了。

SpecialUrgencyMessage:

使用很简答:

1.6 添加新的消息发送方式:加入邮件发送方式

我们要加入新的发送方式也很简单,只需要在新增一个具体实现即可。

EmailMessage:

1.7 小结

采用桥接模式来实现过后,抽象部分和实现部分分离开了,可以相互独立的变化,而不会相互影响。因此在抽象部分添加新的消息类型,对发送消息的实现部分是没有影响的;反过来增加发送消息的方式,对消息类型也是没有影响的。

我就是我,是颜色不一样的烟火。 我就是我,是与众不同的小苹果。

à悟空学院:https://t.cn/Rg3fKJD

SpringBoot视频:http://t.cn/A6ZagYTi

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:无桥接模式之消息发送 :桥接模式:结婚发消息不是一件简单的事情
下一篇:你肯定能看懂的Java IO相关知识总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~