桥接设计模式
-
简单介绍
桥接模式是一种结构型设计模式。该模式是将抽象和具体的实现这两个维度独立开来,二者互不影响,可以独立的扩展。通过组合的方式,将二者进行关联。
-
使用场景
一个类存在两个变化的维度,且这两个变化维度都有扩展的需求,那么这种类在结构在设计时可以采用桥接模式。例如:对智能手机App进行类的设计时,可以对其抽象出两个维度。其中一个维度是手机的操作系统(如新增一个鸿蒙系统),另一个变化的维度是新增一款App(如新增一个音乐App)。那么这种类的结构在设计时可以采用桥接模式。
-
场景举例
JDBC中的Driver和Connection的结构设计采用的是桥接模式。JDBC提供一套接口规范,其他厂商在遵守规范的前期下,可以有自己的具体实现。JDBC中存在两个接口,分别是Driver和Connection。MySQL针对Driver接口的具体实现为:ReplicationDriver、NonRegisteringDriver等,针对Connection接口具体实现为:ConnectionImpl、LoadBalancedConnection等。具体的Connection获取则是Driver的实现类与Connection具体的实现类协作来获取。对于Driver和Connection可以轻易做到扩展,并且用户只需要通过修改jar包,来改变Driver和Connection从而达到切换数据的目的。
-
UML类图
-
具体实现
-
描述
-
手机App,根据操作系统来区分,可以分为IOS(IosApp)和Android(AndroidApp)版本
-
例子中的App为微信(WeChat)、支付宝(Alipay)
-
通过桥接模式对操作系统版本和和App进行组合,得出IOS版本的微信和支付宝以及Android版本的微信和支付宝
-
-
实现代码
AbstractApp.java
/** * 桥接类 */ public abstract class AbstractApp { /** * 将App具体实现,聚合进来 */ public AppImplementor appImplementor; public AbstractApp(AppImplementor appImplementor) { this.appImplementor = appImplementor; } public void showOsVersion() { System.out.println(String.format("版本:%s,名称:%s", getOsVersion(), appImplementor.getAppName())); } public abstract String getOsVersion(
-