当前位置: 首页 > news >正文

Java设计模式(桥接模式)

定义

       将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

角色

       抽象类(Abstraction):定义抽象类,并包含一个对实现化对象的引用。

       扩充抽象类(RefinedAbstraction):是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色的业务方法。

       实现类接口(Implementor):定义实现化角色的接口,供扩展抽象化角色调用。

       具体实现类(ConcreteImplementor):给出实现化角色的具体实现。

优点

       分离抽象接口及其实现部分,使得抽象和实现可以沿着各自的维度来变化。

       可以取代多层继承方案,极大地减少了子类的个数

       提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

缺点

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

       正确识别出系统中两个独立变化的维度并不是一件容易的事情

适用场景

       需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系

       抽象部分和实现部分可以以继承的方式独立扩展而互不影响

       一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展

       不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统

案例

       某软件公司要开发一个跨平台图像浏览系统,要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、UNIX等多个操作系统上运行。系统首先将各种格式的文件解析为像素矩阵(Matrix),然后将像素矩阵显示在屏幕上,在不同的操作系统中可以调用不同的绘制函数来绘制像素矩阵。另外,系统需具有较好的扩展性,以便在将来支持新的文件格式和操作系统。试使用桥接模式设计该跨平台图像浏览系统。

类图

http://www.lryc.cn/news/418095.html

相关文章:

  • 【独家原创】基于APO-Transformer-LSTM多特征分类预测(多输入单输出)Matlab代码
  • 【大模型】大模型指令微调的“Prompt”模板
  • Spring的设计模式----工厂模式及对象代理
  • 【算法】浅析广度优先搜索算法
  • 分布式时序数据库TimeLyre 9.2发布:原生多模态、高性能计算、极速时序回放分析
  • PMP考试题库每日五题+答案解析
  • 机器学习用python还是R,哪个更好?
  • 【数据结构】mapset详解
  • 数据结构(邓俊辉)学习笔记】词典 02—— 散列函数
  • Python学习(1):使用Python的Dask库实现并行计算
  • 数据结构 - 哈希表
  • 电商选品这几点没做好,等于放弃80%的流量!
  • 【教程】最新可用!Docker国内镜像源列表
  • 使用RabbitMQ在Spring Boot入门实现简单的消息的发送与接收
  • 基于物联网的水质监测系统设计与实现:React前端、Node.js后端与TCP/IP协议的云平台集成(代码示例)
  • Vcpkg安装指定版本包或自定义安装包
  • 【C++深度探索】红黑树实现Set与Map的封装
  • 终于有人把客户成功讲明白了
  • [新械专栏] 肾动脉射频消融仪及一次性使用网状肾动脉射频消融导管获批上市
  • leetcode-119-杨辉三角II
  • 【第八节】python正则表达式
  • 三大浏览器Google Chrome、Edge、Firefox内存占用对比
  • 【wiki知识库】08.添加用户登录功能--后端SpringBoot部分
  • vue中nextTick的作用
  • 计算机网络面试-核心概念-问题理解
  • go语言创建协程
  • RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听
  • 【grafana 】mac端grafana配置的文件 grafana.ini 及login
  • 程序员如何在人工智能时代保持核心竞争力
  • 回溯排列+棋盘问题篇--代码随想录算法训练营第二十三天| 46.全排列,47.全排列 II,51. N皇后,37. 解数独