美文网首页
java23种设计模式-结构型模式之桥接模式

java23种设计模式-结构型模式之桥接模式

作者: 薛之谦chj | 来源:发表于2020-04-18 16:41 被阅读0次

    作者 薛之谦chj  转载请注明出处

    我的知乎:https://zhuanlan.zhihu.com/c_1229107265379897344


    内容简介:

    桥接模式(Bridge)

    桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。我们来看看关系图:

    实现代码:

    先定义接口:

    分别定义两个实现类:

    定义一个桥,持有Sourceable的一个实例:

    测试类:

    输出:

    this is the first sub!

    this is the second sub!

    这样,就通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用。接下来我再画个图,大家就应该明白了,因为这个图是我们JDBC连接的原理,有数据库学习基础的,一结合就都懂了。

    桥接模式的应用

    1. 何时使用

    系统可能有多个角度分类,每一种角度都可能变化时

    2. 方法

    把这种角度分类分离出来,让它们单独变化,减少它们之间的耦合(合成/聚合复用原则)

    3. 优点

    抽象和实现分离。桥梁模式完全是为了解决继承的缺点而提出的设计模式

    优秀的扩展能力

    实现细节对客户透明。客户不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装

    4. 缺点

    会增加系统的理解与设计难度。由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程

    5. 使用场景

    不希望或不适用使用继承的场景

    接口或抽象类不稳定的场景

    重用性要求较高的场景

    6. 应用实例

    开关。我们可以看到的开关是抽象的,不用管里面具体怎么实现

    手机品牌与手机软件。两者间有一条聚合线,一个手机品牌可以有多个手机软件

    7. 注意事项

    不要一涉及继承就考虑该模式,尽可能把变化的因素封装到最细、最小的逻辑单元中,避免风险扩散

    当发现类的继承有n层时,可以考虑使用该模式

    分析桥接模式

    在生活中也有很多桥接模式的例子:

    我们都去买过手机,手机按照品牌分可以分为华为、小米、oppo、vivo等品牌,如果这些手机按照内存分又可以分为4G、6G、8G等等。假如我们每一种手机都想要玩一下,至少需要4*3个。这对我们来说这些手机也太多了,竟然有12个,最主要的是手机品牌和内存是放在一起的。现在有这样一种机制,手机牌品商是一个公司,做手机内存的是一个公司,想要做什么手机我们只需要让其两者搭配起来即可。有点类似于全球贸易分工明确的思想,这就是桥接模式,把两个不同维度的东西桥接起来。

    1、为什么使用桥接模式不使用继承呢?

    继承是一种强耦合关系,子类与父类有非常紧密的依赖关系,父类的任何变化 都会导致子类发生变化。因此才使用桥接模式,使用了桥接模式之后,我们的两个维度就像桥梁一样被链接了起来。体现了松耦合的特性。

    2、桥接模式的优点

    (1)分离抽象和实现部分:把手机、内存抽象出来。实现与之分离。

    (2)松耦合:两个维度分开

    (3)单一职责原则:每个维度各干各的活

    关于桥接模式的使用场景我觉得你只需要知道他的思想,然后在遇到问题的时候能够想到这种模式即可。

    相关文章

      网友评论

          本文标题:java23种设计模式-结构型模式之桥接模式

          本文链接:https://www.haomeiwen.com/subject/mkpjvhtx.html