「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」。
1.桥接模式的理解
桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。它属于一种结构型设计模式。 通俗一点的话来讲,就是它用组合关系替代了原本的继承关系,降低它的抽象部分和实现部分的耦合度。
举个例子,如下图:
这里我们可以把手机看成接口类,我们购买手机的时候有几个固定的需求(开机,关机,打电话等),不管是老年机,还是别的手机,它们都必须要有这三个功能,但是它有不同的品牌有不同的实现。所以我们可以把最下面的如:华为老年机,看成具体实现类。到了这里大家也可以看出,这里会有一个问题:当我们新增一个苹果手机时,我们需要还多写三个对应的版本实现类。或者当我们新增一个版本如:3g手机时,需要在每个品牌下都多写一个实现类。这样设计扩展性很不好。
桥接模式的理解,如下图:
这样画,大家是不是就比较容易理解了,手机我们还是把它抽象出来,他必须要满足上面的几个功能(开机,关机,打电话等),我们暴露统一的接口,具体的实现交给不同的品牌。这样我们相当于把继承关系变成变成了组合关系,我们这样扩展的话,就不会影响原来的代码,满足开闭原则:对修改关闭,对扩展开放。
2.uml类图
这里大家可以看到:这里把手机作成一个父类,他有不同的子类实现,如折叠机和直板机等。而把品牌由原来的继承改为了组合,这些基本功能由品牌方去具体实现,我们在这种模式下,添加新的款式的手机,或者添加新的品牌手机就不会影响原来的代码。
3.代码实现
- 手机:抽象化(Abstraction)角色,定义一组功能的实现(具体实现,由实现化对象实现),包含一个实现化对象引用
- 品牌:实现化角色,供抽象化角色调用
3.折叠手机:扩展抽象化角色,抽象化角色的子类
- 小米手机:具体实现化角色,功能的最终实现
4.应用案例
jdbc连接驱动类
jdbc中统一规定了连接方式,即调用不同数据库厂商的driver类,所以据暴露了一个driver接口,不同的厂商由不同的实现方式
这里面大家感兴趣的话,可以自己在研究研究。