java 设计模式 -- 桥接模式

81 阅读3分钟

「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」。

1.桥接模式的理解

桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。它属于一种结构型设计模式。 通俗一点的话来讲,就是它用组合关系替代了原本的继承关系,降低它的抽象部分和实现部分的耦合度。

举个例子,如下图:

image.png 这里我们可以把手机看成接口类,我们购买手机的时候有几个固定的需求(开机,关机,打电话等),不管是老年机,还是别的手机,它们都必须要有这三个功能,但是它有不同的品牌有不同的实现。所以我们可以把最下面的如:华为老年机,看成具体实现类。到了这里大家也可以看出,这里会有一个问题:当我们新增一个苹果手机时,我们需要还多写三个对应的版本实现类。或者当我们新增一个版本如:3g手机时,需要在每个品牌下都多写一个实现类。这样设计扩展性很不好。

桥接模式的理解,如下图:

image.png

这样画,大家是不是就比较容易理解了,手机我们还是把它抽象出来,他必须要满足上面的几个功能(开机,关机,打电话等),我们暴露统一的接口,具体的实现交给不同的品牌。这样我们相当于把继承关系变成变成了组合关系,我们这样扩展的话,就不会影响原来的代码,满足开闭原则:对修改关闭,对扩展开放。

2.uml类图

image.png

这里大家可以看到:这里把手机作成一个父类,他有不同的子类实现,如折叠机和直板机等。而把品牌由原来的继承改为了组合,这些基本功能由品牌方去具体实现,我们在这种模式下,添加新的款式的手机,或者添加新的品牌手机就不会影响原来的代码。

3.代码实现

  1. 手机:抽象化(Abstraction)角色,定义一组功能的实现(具体实现,由实现化对象实现),包含一个实现化对象引用

image.png

  1. 品牌:实现化角色,供抽象化角色调用

image.png

3.折叠手机:扩展抽象化角色,抽象化角色的子类

image.png

  1. 小米手机:具体实现化角色,功能的最终实现

image.png

4.应用案例

jdbc连接驱动类

image.png jdbc中统一规定了连接方式,即调用不同数据库厂商的driver类,所以据暴露了一个driver接口,不同的厂商由不同的实现方式

image.png 这里面大家感兴趣的话,可以自己在研究研究。