桥接模式举个例子简单理解

学习目标:

  • 桥接模式举个例子简单理解

学习内容:

简要介绍

桥接模式(Bridge Pattern)是一种结构型设计模式,它主要用于将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式通过提供一个接口,将一个或多个抽象类与它们的实现类解耦,从而实现这种分离。

简单例子:绘图软件

假设我们有一个绘图软件,它支持两种类型的图形:圆形和矩形,同时支持两种不同的渲染方式:矢量渲染和光栅渲染。

抽象部分

我们有一个Shape接口,它定义了所有图形的基本操作,比如绘制(draw)。

public interface Shape {void draw();
}

然后,我们有具体的图形类实现这个接口:

public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle.");}
}public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle.");}
}

实现部分

接下来,我们有一个Renderer接口,它定义了渲染的逻辑:

public interface Renderer {void render();
}

然后,我们有具体的渲染器类实现这个接口:

public class VectorRenderer implements Renderer {@Overridepublic void render() {System.out.println("Vector rendering.");}
}public class RasterRenderer implements Renderer {@Overridepublic void render() {System.out.println("Raster rendering.");}
}

桥接模式的实现

现在,我们将抽象部分和实现部分结合起来。每个图形类都有一个Renderer对象,这样,图形类就可以委托给渲染器来执行渲染操作:

public abstract class ShapeImpl {protected Renderer renderer;public ShapeImpl(Renderer renderer) {this.renderer = renderer;}public abstract void draw();
}public class CircleImpl extends ShapeImpl {public CircleImpl(Renderer renderer) {super(renderer);}@Overridepublic void draw() {renderer.render();System.out.println("Drawing a circle.");}
}public class RectangleImpl extends ShapeImpl {public RectangleImpl(Renderer renderer) {super(renderer);}@Overridepublic void draw() {renderer.render();System.out.println("Drawing a rectangle.");}
}

使用桥接模式

现在,我们可以独立地变化图形类型和渲染方式:

public class Client {public static void main(String[] args) {Shape circle = new CircleImpl(new VectorRenderer());circle.draw(); // 输出: Vector rendering. Drawing a circle.Shape rectangle = new RectangleImpl(new RasterRenderer());rectangle.draw(); // 输出: Raster rendering. Drawing a rectangle.}
}

通过桥接模式,我们可以在不修改图形类的情况下,增加新的渲染方式,或者在不修改渲染器的情况下,增加新的图形类型。这样,系统变得更加灵活和可扩展。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解

JDBC 简化JDBC的开发 JDBC仅仅是一套接口 是一套规范 Mybatis是持久层框架 用于简化JDBC的开发 使用Java语言操作关系型数据库的一套API 原始的JDBC程序 package com.bigdate.mybatis;import com.bigdate.mybatis.mapper.UserMapper; import com.bigdate.mybatis.pojo.Use…

容联云零代码平台容犀desk:重新定义坐席工作台

在数智化浪潮的推动下,企业亟待灵活适应市场变化、快速响应客户需求,同时还要控制成本并提升效率,传统的软件开发模式因开发周期长、成本高、更新迭代慢等问题,逐渐难以满足企业灵活多变的业务需求。 容犀Desk,观察到…

常规的排序算法汇总

前言 排序算法,在职业生涯中,时常有用到,不论是在项目中,还是在面试中。 在这里记录一下常用的排序算法,也给自己插个眼。 排序算法分为:冒泡排序、插入排序、选择排序、快速排序、希尔排序、堆排序、基数…

Vue.js的发展史(一)

Vue.js的发展史(一) 什么是Vue? Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发…

远程桌面局域网 工具

官网: Tailscale 下载软件: Download Tailscale 在两台电脑安装tailscale,安装后登录,登录是在网页上登录, 登录后,网页上会给你分配ip 有了两个ip,就可以局域用mstsc进行远程登录了。 配…

Spring Security实现用户认证二:前后端分离时自定义返回Json内容

Spring Security实现用户认证二:前后端分离时自定义返回Json内容 1 前后端分离2 准备工作依赖WebSecurityConfig配置类 2 自定义登录页面2.1 Spring Security的默认登录页面2.2 自定义配置formLogin 3 自定义登录成功处理器4 自定义登录失败处理器5 自定义登出处理器…

MongoDB 集合创建指南:命名规范、索引优化和数据模型设计

在构建任何 MongoDB 数据库时,正确创建集合是确保数据存储和查询效率的关键。从合适的命名规范到索引优化和数据模型设计,每个步骤都至关重要。让我们深入探讨 MongoDB 集合的创建过程,以及在每个阶段中需要考虑的关键要点。 MongoDB 创建集…

经济寒冬 | 品牌策划人还可以去哪些行业发展?

在这个经济寒冬下,咱们品牌策划人也需要考虑后路问题了。 随着市场竞争的加剧和消费者需求的不断变化,品牌策划人的工作不再只是简单的广告宣传和市场推广。 咱们需要重新思考自己的角色,寻找新的生存和发展之道。 当然,品牌策…

VUE之旅—day2

文章目录 Vue生命周期和生命周期的四个阶段created应用—新闻列表渲染mounted应用—进入页面搜索框就获得焦点账单统计(Echarts可视化图表渲染) Vue生命周期和生命周期的四个阶段 思考: 什么时候可以发送初始化渲染请求?&#xff…

Linux 第三十二章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

前端本地调试云效上Vue项目的构建产物

一、问题背景 前两天前端小伙伴,在云效上构建了一个前端项目,构建结果显示成功,访问后发现Console控制台报错:ReferenceError: defineComponent is not defined 在此之前的版本,构建和访问并没有此异常,而…

【设计模式】JAVA Design Patterns——Abstract-document(抽象文档模式)

🔍 目的 使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。 🔍 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

运维别卷系列 - 云原生监控平台 之 00.prometheus 监控汇总

以下是 运维别卷系列 - 云原生监控平台 相关的详细文章链接,相应的内容,也只是用来做入门使用的 运维别卷系列 - 云原生监控平台 之 01.prometheus 入门和部署运维别卷系列 - 云原生监控平台 之 02.prometheus exporter 实践运维别卷系列 - 云原生监控平…

eMMC和SD模式速率介绍

概述 在实际项目开发中我们常见的问题是有人会问,“当前项目eMMC、SD所使用模式是什么? 速率是多少?”。这些和eMMC、SD的协议中要求的,要符合协议。接下来整理几张图来介绍。 eMMC 模式介绍 一般情况下我们项目中都是会支持到HS400 8bit 1.8V,最大时钟频率为200MHZ,通…

会议邀请函:Prometheus开源无人机平台-无人机追踪无人车代码实战|第四届中国智能汽车创新大会

扫描上方海报二维码,参与报名 阿木实验室:为机器人研发提供开源软硬件工具和课程服务,让研发更高效! 技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。如果你…

【C语言】5.C语言函数(1)

文章目录 1.函数的概念2.库函数2.1 标准库和头文件2.2 库函数的使⽤⽅法2.2.1 学习和使用2.2.2 头⽂件包含2.2.3库函数文档的一般格式 3.⾃定义函数3.1 函数的语法形式 4.形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5.return 语句6.数组做函数参数 1.函数的概念 函数也称…

C#【进阶】委托和事件

委托和事件 文章目录 1、委托1、委托概念2、基本语法3、定义自定义委托4、使用自定义委托5、委托变量可以存储多个函数6、系统定义好的委托思考 怪物死亡数据更新 2、事件1、事件概念2、事件的使用3、为什么有事件思考 热水器 3、匿名函数1、匿名函数概念2、基本语法3、使用4、…

iLogtail 社区开源之夏活动来了!

作者:玄飏 在这个充满活力的夏日,随着阳光一同灿烂的是开源精神的光辉与创新的火花。iLogtail 社区高兴地宣布,我们正式加入开源之夏 2024 的行列,诚邀每一位怀揣梦想与激情的学生开发者,共同开启一场探索技术前沿、贡…

机器学习入门介绍

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 目录 三大方向机器学习产生的原因机器如何学习…

sklearn机器学习编程练习大全(一)

sklearn机器学习编程练习大全 第1题 计算DataFrame每列的缺失值比例第2题 填充缺失值第3题 使用常量填充缺失值第4题 使用最频繁出现的值填充缺失值第5题 过滤掉存在空值的行第6题 使用常量填充字符串列第7题 数值离散化第8题 虚拟编码第9题 提取元素的个数第10题 特征提取--是…