桥接设计模式13
一、定义
官方定义:桥接模式属于结构型设计模式,将抽象部分与实现部分分离,使它们都可以独立的变化。
定义:一个抽象类中持有多个接口或抽象类的引用
将两种可以独立变化的抽象分离开来,让它们独立的变化。再通过组合者两个抽象,形成功能强大的组合类。
上述定义太专业了,我的理解是:一个抽象类中持有多个接口或抽象类的引用,抽象类可以有不同的子类,接口也可以有不同的实现类,将这些不同的子类与不同的实现类进行组合操作,形成功能强大的组合对象,并且有效的控制了类的数量。
Client:调用环境,面向接口编程,接收Abstraction类的实现类
Abstraction:抽象类,持有Implementor接口的引用,并且相关定义抽象业务方法。
Implementor:接口,定义另外模块的业务。
RefinedAbstraction:Abstraction抽象类的实现类,作为Client调用环境中Abstraction实现。在实际编程过程中可以使用Spring注入。
ConcreteImplementorA:另外模块接口的实现。
推荐几篇非常好的桥接设计模式的博客:
跟着实例学习设计模式(9)-桥接模式bridge(结构型) 这篇博客里面的例子让我拨云见日,茅塞顿开
二、 优缺点
优点:
两种都具有变化的分类实现独立变化,真的是松耦合的典范
有效的控制类的数量。因为使用了对象的组合,在设计类的过程中,将类的数量由不同维度的“乘积”转为了“和”。
缺点:
需要在设计之处就要面向接口编程,要求程序员拥有较高的面向接口编程的能力,难度可想而知。
三、我对桥接设计模式的思考
桥接设计模式是一种对象结构型设计模式,它的设计目的是让系统扩展性更好,灵活性更高。对于设计一个新类来说,可能有多个变化因素,这个在生活中也处处可见。不同的颜色,不同的职业,不同的省份。专业一点的,比如不同的数据库驱动,不同的数据库连接池,实现了相同Service接口的不同实现。
对于面向接口编程来说,有其它设计模式也能与桥接设计模式共同工作。如果一个抽象类中持有其它接口的引用。在实现这个接口的时候,可以提供多种不同的实现类,让这些实现类可以相互替换,已应对不同的需求变动,这就是策略设计模式。另外,如果发现功能相似的接口实现不能协同工作,可以使用适配器设计模式来适配不相容的接口。
说的更接地气一点,就是在写代码的时候,尝试使用桥接设计模式。然后维护阶段,需求日常变化,这个时候使用采用策略设计模式或者适配器设计模式来编写新的代码,偷懒一点也可以为不能满足现在需求的实现类做个把代理,增强增强原来的功能。
四、应用场景思考
多于两个维度或者两个维度以上的变化业务场景,可以考虑使用桥接设计模式。
在SpringBoot项目中,如果我们能够提供用户一些功能,可以使用桥接设计模式预留抽象类与接口,并使用@ConditionOnMissingBean提供默认的抽象实现类与接口实现类。如果用户在导入我们的JAR包后,希望覆盖我们的默认实现,则可以提供一个自定义的实现。
分割线--------------------------------------------------------------------------------------------
下一篇:享元设计模式14
刻意练习
(1) 桥接设计模式的定义(一句话描述)
(2) 桥接设计模式的应用场景(客户端里会导入两个维度的抽象。客户端可以使用反射或者注入抽象实现)
(3) 优缺点
(4) 类图(理解并在大脑里过一下,就能够知道代码是怎么写的了)