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

编程-设计模式 7:桥接模式

设计模式 7:桥接模式

定义与目的
  • 定义:桥接模式将抽象部分与它的实现部分分离,使得它们都可以独立地变化。
  • 目的:该模式的主要目的是解耦一个类的抽象部分与其实现部分,使得这两部分可以独立地发展和变化。
实现示例

假设我们有一个图形库,需要支持不同平台上的图形绘制。我们可以使用桥接模式来实现这个需求。

// 定义抽象部分 - 图形接口
public interface Shape {void draw();
}// 定义实现部分 - 绘图接口
public interface DrawAPI {void draw();
}// 具体实现 - 圆形
public class Circle implements Shape {private int x, y, radius;private DrawAPI drawAPI;public Circle(int x, int y, int radius, DrawAPI drawAPI) {this.x = x;this.y = y;this.radius = radius;this.drawAPI = drawAPI;}@Overridepublic void draw() {drawAPI.draw();System.out.println("Drawing a circle with x: " + x + ", y: " + y + ", radius: " + radius);}
}// 具体实现 - Windows 平台绘图
public class WindowsDrawAPI implements DrawAPI {@Overridepublic void draw() {System.out.println("Drawing using Windows API");}
}// 具体实现 - MacOS 平台绘图
public class MacOsDrawAPI implements DrawAPI {@Overridepublic void draw() {System.out.println("Drawing using MacOS API");}
}// 客户端代码
public class Client {public static void main(String[] args) {DrawAPI windowsDrawAPI = new WindowsDrawAPI();DrawAPI macOsDrawAPI = new MacOsDrawAPI();Shape circleWindows = new Circle(100, 100, 10, windowsDrawAPI);Shape circleMacOs = new Circle(100, 100, 10, macOsDrawAPI);circleWindows.draw();circleMacOs.draw();}
}
使用场景
  • 当你需要在抽象和实现之间建立一个松散耦合的关系时。
  • 当你需要独立地扩展抽象和实现的层次结构时。
  • 当一个类的实现细节不应该影响到使用它的客户时。

桥接模式通过将抽象与实现分离,使得两者可以独立地变化和发展。这对于需要在不同的平台上提供相同功能的应用程序非常有用。

小结

桥接模式是一种常用的结构型模式,它可以帮助你解耦抽象与实现,使得两者可以独立地发展。这在需要支持多平台或多版本的系统中特别有用,因为它可以减少代码的重复,并提高系统的可维护性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • pandas赋值不成功
  • 职业教育物联网实验实训室建设应用案例
  • 入营测评题解
  • BeanFactory 和FactoryBean的区别
  • linux常用网络工具汇总二
  • Duilib 二
  • openfeign本地试用
  • 工厂模式 vs 策略模式:Java设计模式详细对比
  • 科学碳目标|科学碳倡议|SBTI认证|科学基础目标倡议
  • JSONB字段搜索走索引
  • 【人工智能】常用的人工智能框架、模型、使用方法、应用场景以及代码实例的概述
  • 嵌入式实时操作系统VxWorks面试题及参考答案(4万字长文)
  • 学习笔记第十九天
  • 网络编程先验知识1
  • Flake8 和 Autopep8 使用指南
  • 网络传输文件的问题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • idea + plantuml 画流程图
  • js中的正则表达式入门
  • php面试题 汇集2
  • SpringBoot 实战 (三) | 配置文件详解
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • vue自定义指令实现v-tap插件
  • Webpack 4 学习01(基础配置)
  • 彻底搞懂浏览器Event-loop
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 巧用 TypeScript (一)
  • 使用 @font-face
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 突破自己的技术思维
  • 用Python写一份独特的元宵节祝福
  • 白色的风信子
  • hi-nginx-1.3.4编译安装
  • zabbix3.2监控linux磁盘IO
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • ###项目技术发展史
  • #07【面试问题整理】嵌入式软件工程师
  • #NOIP 2014# day.1 T2 联合权值
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (二)Eureka服务搭建,服务注册,服务发现
  • (三)终结任务
  • (十一)c52学习之旅-动态数码管
  • (一)WLAN定义和基本架构转
  • (转)jdk与jre的区别
  • (转)nsfocus-绿盟科技笔试题目
  • (转)setTimeout 和 setInterval 的区别
  • .NET Core 中的路径问题
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET delegate 委托 、 Event 事件
  • .net 生成二级域名
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段