一、桥接模式介绍
桥接模式是指将程序的抽象部分与具体实现部分进行分离,抽象部分与具体实现部分作为两个维度,可以分别进行扩展,也就是说抽象部分有其抽象类与具体实现类,具体实现部分也有其抽象类与具体实现类,这样两个维度实现解耦,具体功能的实现由抽象部分委托给具体实现部分,这符合开闭原则。而所谓桥接,就是将抽象部分的类与具体实现部分的类通过组合的方式进行串联起来,这符合组合复用原则。抽象部分与具体实现部分之间的类可以进行不同的排列组合,达到不同的功能。缺点是必须明确确定两个维度,这种抽象与具体增加了系统设计的复杂度。
二、桥接模式与其他模式的区分
桥接模式与组合模式:
组合模式主要强调部分与整体之间的关系,有一个树形关系。而桥接模式抽象与具体是同一层级上的。
桥接模式与适配器模式:
适配器模式主要是改变接口,使原本不兼容的接口可以兼容调用。而桥接模式主要是将抽象与具体进行分离解耦,然后利用组合调用。
三、具体的业务场景分析
场景:
我们在银行开账户时可以选择不同的银行(比如工商银行、农业银行),也可以选择不同的账户类型(比如活期账户、定期账户),这就是两个不同维度上的,这两个维度可以进行排列组合,比如工商银行的活期账户、工商银行的定期账户,农业银行的活期账户、农业银行的定期账户。并且一旦我们增加银行类型(比如加一个建设银行)只需要在银行这一个维度进行扩展,如果要增加账户类型(各种理财类型等)就只需要在账户这一个维度进行扩展,这两个维度我们通过组合的方式联系起来,这就很符合桥接模式的应用场景,下面我们看具体实现代码与最终的输出打印:
从上面这个类图可以很清晰的看到桥接模式类之间的关系,左边是抽象部分,右边是具体实现部分,也就是说银行的功能是委托给账户进行的,左边和右边可以独立扩展,只要继承相应的抽象即可,抽象与具体实现部分用组合的方式桥接起来。