java设计模式之桥接模式(Bridge)

发布时间 - 2026-01-10 22:15:15    点击率:

概述

桥接模式一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化的部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

UML结构图

代码示例

package interview;

interface Implementor{

  void operationImpl();
}

abstract class Abstraction{
  protected Implementor implementor;

  public Abstraction(Implementor implementor){
    this.implementor = implementor;
  }

  public void operation(){
    implementor.operationImpl();
  }
}

class ConcreteImplementorA implements Implementor {
  @Override
  public void operationImpl() {
    System.out.println("具体实现A");
  }  
}

class ConcreteImplementorB implements Implementor {
  @Override
  public void operationImpl() {
    System.out.println("具体实现B");
  }  
}

class RefinedAbstraction extends Abstraction{

  public RefinedAbstraction(Implementor implementor) {
    super(implementor);
  }

  public void otherOperation(){
    System.out.println("其他操作");
  }
}

public class MainTest {

  public static void main(String arg[]) {
    Implementor implementor = new ConcreteImplementorA();
    RefinedAbstraction abstraction = new RefinedAbstraction(implementor);
    abstraction.operation();
    abstraction.otherOperation();
  }
}

使用场景

1.如果你不希望在抽象和实现部分采用固定的绑定关系,可以采用桥接模式,来把抽象和实现部分分开,然后在程序运行期间来动态的设置抽象部分需要用到的具体实现,还可以动态切换具体的实现。
2.如果出现抽象部分和实现部分都应该可以扩展的情况,可以采用桥接模式,让抽象部分和实现部分可以独立的变化,从而可以灵活的进行单独扩展,而不是搅在一起,扩展一边可以影响另一边。
3.如果希望实现部分的修改,不会对客户产生影响,可以采用桥接模式,客户是面向抽象的接口在运行,实现部分的修改,可以独立于抽象部分,也就不会对客户产生影响了,也可以说对客户是透明的。
4.如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式,分析功能变化的原因,看看是否能分离成不同的维度,然后通过桥接模式来分离他们,从而减少子类的数目。

如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
抽象化角色和具体化角色都应该可以被子类扩展。在这种情况下,桥接模式可以灵活地组合不同的抽象化角色和具体化角色,并独立化地扩展。
设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # 桥接模式  # Bridge  # Java结构型设计模式中的适配器模式与桥接模式解析  # Java设计模式之桥接模式实例详解  # 23种设计模式(9) java桥接模式  # java设计模式--桥接模式详解  # Java设计模式之java桥接模式详解  # Java设计模式之桥接模式的示例详解  # 详解Java设计模式之桥接模式  # Java设计模式中的桥接模式  # 桥接  # 子类  # 的是  # 客户端  # 还可以  # 也就  # 多个  # 结构图  # 会对  # 这种情况  # 或以上  # 或者说  # 提供一个  # 在这种情况下  # 绑定  # 是否能  # 而将  # 大家多多  # 管理类  # 说对 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  网站建设要注意的标准 促进网站用户好感度!  青岛网站建设如何选择本地服务器?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Android okhttputils现在进度显示实例代码  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  高端企业智能建站程序:SEO优化与响应式模板定制开发  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  Laravel如何自定义分页视图?(Pagination示例)  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何基于PHP生成高效IDC网络公司建站源码?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  如何在阿里云虚拟主机上快速搭建个人网站?  如何批量查询域名的建站时间记录?  如何在香港免费服务器上快速搭建网站?  创业网站制作流程,创业网站可靠吗?  详解jQuery中基本的动画方法  如何快速查询网站的真实建站时间?  jQuery中的100个技巧汇总  QQ浏览器网页版登录入口 个人中心在线进入  Java遍历集合的三种方式  Java解压缩zip - 解压缩多个文件或文件夹实例  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何在建站宝盒中设置产品搜索功能?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel如何生成URL和重定向?(路由助手函数)  ,南京靠谱的征婚网站?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  制作公司内部网站有哪些,内网如何建网站?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  详解MySQL数据库的安装与密码配置  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel API资源类怎么用_Laravel API Resource数据转换  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何为不同团队 ID 动态生成多个独立按钮