本节分享我对 桥接 模式的理解,举一个现实生活中手机的操作问题,手机分为不同的类别:直立式的手机、折叠式的手机、旋转式的手机。不同的手机类别分为不通的型号: xiaoMi 、 华为 、 Vivo ……等。
传统解决手机使用问题的UML类图:
传统方式解决手机操作问题的分析:
1)扩展性维问题(类爆炸),如果我们增加手机的样式(旋转式),需要增加各个品牌的手机的类,同样如果们增加一个手机品牌,就需要增加手机的样式类。
2)违反了 单一职责原则 ,当我们增加手机的样式时,要同时增加所有品牌的手机,这样增加了代码的维护成本。
3)解决方案,桥接模式。
桥接模式(Bridge)基本介绍
1)桥接模式是指:将抽象和实现放到连个类层次中,实现抽象和实现分离和改变,为了 解耦 。
2)是一种结构型设计模式。
3)桥接模式基于类的最小设计原则,通过封装、继承、聚合行为让不同的类承担不同的职责。 它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能。
桥接模式的原理UML图:
1) Client 类是调用者。
2)抽象类(Abstration):维护了Implementor及其子类的的聚合关系。Abstration充当RefinedAbstration和Implementor的桥。
3)RefinedAbstration继承Abstration,具体的操作通过调用Abstration实现。
桥接模式解决手机操作问题
1)使用桥接模式改进传统的方式,让程序具有更好的扩展性,利于程序的维护。
2)桥接模式解决手机的UML类图。
桥接模式在 JDBC 的源码剖析
1) Jdbc 的 Driver接口,如果从桥接模式来看,Driver就是一个接口,下面可以有MySQL的Driver,Oracle的Driver,这些就可以当做实现接口类
2) 代码分析+Debug源码
桥接模式的注意事项和细节
1)实现了抽象和实现部分的分离,从而极大的提高了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而更好的结构化系统。
2) 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。
3) 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。
4) 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
5) 桥接模式 要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景。
桥接模式其它应用场景
1) 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用.
2) 常见的应用场景:
-JDBC驱动程序
-银行转账系统
转账分类: 网上转账,柜台转账,AMT转账
转账用户类型:普通用户,银卡用户,金卡用户..
-消息管理
消息类型:即时消息,延时消息
消息分类:手机短信,邮件消息, QQ 消息