GOF对桥接模式(Bridge)的定义是:将抽象部分和它的实现部分分离,使它们可以独立地变化。这里需要记录一些概念,参考自《Java与模式》一书:
抽象化:存在于多个实体中的共同的概念性联系,例如:一组对象如果有相同的概念性联系,则可以用一个共同的类加以描述;如果一些类有相同的概念性联系,则可以用一个抽象类加以描述。
实现化:就是给出抽象化的具体实现,例如:一个对象是一个类的实现化;一个具体类可以是一个抽象类的实现化。
脱耦:耦合是两个实体具有某种强关联关系,将这种强关联关系去掉就是解耦的过程。所谓强关联是在编译时期就已经确定好了关系,例如:继承就是一种强关联关系;而弱关联关系则是在运行期间可以动态地改变关联状态,类的组合关系就是一种若关联关系,这在Java编程中是最常用的一种关系。
理解GOF所下定义的关键是搞明白“抽象” 和“实现”的含义,这里的抽象说白了就是指一个类及其子类,而“实现”是抽象类及其子类实现自己所用的对象,这句话用汉语说比较困难,请看《Design Patterns Explained》作者的表述:Implementations here means the objects that the abstract class and its derivations use to implement themselves with,这就是“实现” 的含义。比如:有一个图形的抽象类Shape,Shape有相应的子类,比如Rectange类,要实现一个Rectange对象,当然需要Draw方法,如果将Draw方法定义到Shape类中,那么每个继承自Shape类的子类都要自定义自己的Draw()方法,岂不是很麻烦,但是,如果将Draw()方法提炼出来单独放到一个类中(也就是Implementor)中,然后让Shape子类去调用对应的Draw()方法岂不是更妙,这样添加Shape子类就不用再在自己的类中添加Draw()方法了,而是调用相应的ConcreteImplementor中的Draw()方法,下面第一个图是Bridge模式的结构图,第二个图是《Design Patterns Explained》一书中所举画图例子的Bridge模式设计图
图1. Bridge模式结构图
图2. Bridge模式画图设计图
画图举例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | abstract class Shape{ private Drawing drawing; public Shape(Drawing drawing){ this .drawing=drawing; } public void Draw(){ drawing.drawLine(); } } class Rectange extends Shape{ public Rectange(Drawing drawing){ super (drawing); } } abstract class Drawing{ public void drawLine(){}; public void drawCircle(){}; } class V1Drawing extends Drawing{ public void drawLine(){ System.out.println( "Drawing Lines" ); } public void drawCircle(){ System.out.println( "Drawing Circles" ); } } |
《Java与模式》一书还举例一个应用的例子,就是JDBC驱动器的实现利用的是桥梁模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?