2022-07-31 23:23阅读: 40评论: 1推荐: 0

23种设计模式之桥接模式

  • 模式的结构
    • 模式的实现


      Java技术债务

      概述

      桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。

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

      Java技术债务

      桥接模式的优缺点

      桥接(Bridge)模式的优点是:

      • 抽象与实现分离,扩展能力强
      • 符合开闭原则
      • 符合合成复用原则
      • 其实现细节对客户透明

      缺点:

      由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

      桥接模式的结构与实现

      模式的结构

      桥接(Bridge)模式包含以下主要角色。

      1. 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
      2. 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
      3. 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
      4. 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

      模式的实现

      public interface Sourceable {
      	public void method();
      }
      
      public class SourceSub1 implements Sourceable {
       
      	@Override
      	public void method() {
      		System.out.println("this is the first sub!");
      	}
      }
      
      public class SourceSub2 implements Sourceable {
       
      	@Override
      	public void method() {
      		System.out.println("this is the second sub!");
      	}
      }
      
      //定义一个桥,持有Sourceable的一个实例
      public abstract class Bridge {
      	private Sourceable source;
       
      	public void method(){
      		source.method();
      	}
      	
      	public Sourceable getSource() {
      		return source;
      	}
       
      	public void setSource(Sourceable source) {
      		this.source = source;
      	}
      }
      
      public class MyBridge extends Bridge {
      	public void method(){
      		getSource().method();
      	}
      }
      

      测试类:

      public class BridgeTest {
      	
      	public static void main(String[] args) {
      		
      		Bridge bridge = new MyBridge();
      		
      		/*调用第一个对象*/
      		Sourceable source1 = new SourceSub1();
      		bridge.setSource(source1);
      		bridge.method();
      		
      		/*调用第二个对象*/
      		Sourceable source2 = new SourceSub2();
      		bridge.setSource(source2);
      		bridge.method();
      	}
      }
      

      输出:

      this is the first sub!
      this is the second sub!
      

      通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用。

      应用场景

      • 数据库连接,如图所示

      Java技术债务

      • 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
      • 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
      • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

      总结

      • 桥接模式实现了抽象化与实现化的脱耦。他们两个互相独立,不会影响到对方。
      • 对于两个独立变化的维度,使用桥接模式再适合不过了。
      • 对于"具体的抽象类"所做的改变,是不会影响到客户。

      注意事项:
      对于两个独立变化的维度,使用桥接模式再适合不过了。

      更多请移驾。。。
      🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽

      本文作者:Java技术债务
      原文链接:https://www.cuizb.top/myblog/article/1658414521
      版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

      🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽
      Java技术债务
      JVM内存泄漏和内存溢出的原因
      JVM常用监控工具解释以及使用
      Redis 常见面试题(一)
      ClickHouse之MaterializeMySQL引擎(十)
      三种实现分布式锁的实现与区别
      线程池的理解以及使用

      号外!号外!

      最近面试BAT,整理一份面试资料,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。想获取吗?如果你想提升自己,并且想和优秀的人一起进步,感兴趣的朋友,可以在扫码关注下方公众号。资料在公众号里静静的躺着呢。。。

      Java技术债务

      • 喜欢就收藏
      • 认同就点赞
      • 支持就关注
      • 疑问就评论

      一键四连,你的offer也四连

      ————————————————————————————————————————————————————————————————

      posted @   Java技术债务  阅读(40)  评论(1编辑  收藏  举报
      相关博文:
      阅读排行:
      · 一个费力不讨好的项目,让我损失了近一半的绩效!
      · 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
      · 实操Deepseek接入个人知识库
      · CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
      · Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
      点击右上角即可分享
      微信分享提示
      💬
      评论
      📌
      收藏
      💗
      关注
      👍
      推荐
      🚀
      回顶
      收起
      1. 1 404 not found REOL
      404 not found - REOL
      00:00 / 00:00
      An audio error has occurred.