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

桥接模式案例

	桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。桥接模式通过创
建一个桥接接口,将抽象部分和实现部分连接起来,从而实现两者的解耦。

下面是一个详细的桥接模式案例,假设我们要设计一个图形绘制系统,支持不同类型的图形(如圆形、矩形)和不同的绘制工具(如画笔、画刷)。

  1. 定义实现部分的接口
    首先,我们定义一个绘制工具的接口,这个接口将作为桥接模式的实现部分。
// 绘制工具接口
public interface DrawingTool {void drawCircle(int radius, int x, int y);void drawRectangle(int width, int height, int x, int y);
}
  1. 实现具体的绘制工具
    接下来,我们实现具体的绘制工具,如画笔和画刷。
// 画笔工具
public class Pen implements DrawingTool {@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("用画笔绘制圆形,半径: " + radius + ", 位置: (" + x + ", " + y + ")");}@Overridepublic void drawRectangle(int width, int height, int x, int y) {System.out.println("用画笔绘制矩形,宽度: " + width + ", 高度: " + height + ", 位置: (" + x + ", " + y + ")");}
}// 画刷工具
public class Brush implements DrawingTool {@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("用画刷绘制圆形,半径: " + radius + ", 位置: (" + x + ", " + y + ")");}@Overridepublic void drawRectangle(int width, int height, int x, int y) {System.out.println("用画刷绘制矩形,宽度: " + width + ", 高度: " + height + ", 位置: (" + x + ", " + y + ")");}
}
  1. 定义抽象部分的接口
    接下来,我们定义一个图形的抽象类,这个抽象类将作为桥接模式的抽象部分。
// 图形抽象类
public abstract class Shape {protected DrawingTool drawingTool;public Shape(DrawingTool drawingTool) {this.drawingTool = drawingTool;}public abstract void draw();
}
  1. 实现具体的图形
    然后,我们实现具体的图形,如圆形和矩形。
// 圆形
public class Circle extends Shape {private int radius;private int x;private int y;public Circle(int radius, int x, int y, DrawingTool drawingTool) {super(drawingTool);this.radius = radius;this.x = x;this.y = y;}@Overridepublic void draw() {drawingTool.drawCircle(radius, x, y);}
}// 矩形
public class Rectangle extends Shape {private int width;private int height;private int x;private int y;public Rectangle(int width, int height, int x, int y, DrawingTool drawingTool) {super(drawingTool);this.width = width;this.height = height;this.x = x;this.y = y;}@Overridepublic void draw() {drawingTool.drawRectangle(width, height, x, y);}
}
  1. 使用桥接模式
    最后,我们使用桥接模式来绘制图形。
public class BridgePatternDemo {public static void main(String[] args) {Shape circleWithPen = new Circle(10, 50, 50, new Pen());circleWithPen.draw();Shape circleWithBrush = new Circle(10, 50, 50, new Brush());circleWithBrush.draw();Shape rectangleWithPen = new Rectangle(20, 30, 100, 100, new Pen());rectangleWithPen.draw();Shape rectangleWithBrush = new Rectangle(20, 30, 100, 100, new Brush());rectangleWithBrush.draw();}
}

相关文章:

桥接模式案例

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。桥接模式通过创 建一个桥接接口,将抽象部分和实现部分连接起来,从而实现两者的解耦。下面是一个详细的桥接…...

Spring源码二十二:Bean实例化流程五

上一篇Spring源码二十一:Bean实例化流程四,咱们主要分析里createBeanInstance方法Spring给我们提供给的FactoryMethod方法,举例说明了factoryMethod属性如何使用,同时简单讨论了具体实现逻辑。 这一篇咱们将进入反射实例化Bean&am…...

Unity3D中UI层级改变详解

在Unity3D开发中,UI层级的调整是常见的需求,它直接关系到用户界面(UI)元素的显示顺序。在Unity的UI系统中,主要使用UGUI(Unitys Graphical User Interface)来实现界面布局和元素展示。本文将详细讲解Unity3D中如何改变…...

centos安装数据库同步工具sqoop并导入数据,导出数据,添加定时任务

目录 1.安装jdk 1.1上传jdk安装包到/opt目录下并解压 1.2解压 1.3配置环境变量 2.安装hadoop 2.1.下载hadoop 2.2.解压hadoop 2.3配置环境变量 3.安装sqoop 3.1下载 3.2解压 3.3下载依赖包并复制到指定位置 3.3.1下载commons-lang-2.6-bin.tar.gz 3.3.2将mysql-c…...

asp .net core 避免请求body数据量过大

方法1&#xff0c; 全局避免 引入包 dotnet add package Microsoft.AspNetCore.Http.Features using Microsoft.AspNetCore.Http.Features;public void ConfigureServices(IServiceCollection services) {services.Configure<FormOptions>(options >{// 设置允许的最…...

搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器

搭建discuz论坛&#xff08;lvsnginxhttpmysqlnfs&#xff09; 一、IP规划 服务名IP地址服务LVS1192.168.100.110keepalivedipvsadmLVS2192.168.100.111keepalivedipvsadmnginx1192.168.100.113nginxnginx2192.168.100.114nginxnfs192.168.100.116nfs-utilweb1192.168.100.11…...

就业平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;企业管理&#xff0c;企业类型管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;简历&#xff0c;我的 …...

hid-ft260驱动学习笔记 5 - ft260_i2c_probe

目录 1. 保存ft260_device到私有数据 2. 初始化I2C设备分配属性 3. 添加I2C适配器 4. 初始化GPIO 5. ft260_i2c_algo 5.1 ft260_functionality 5.2 ft260_i2c_xfer 5.3 ft260_smbus_xfer 6. ft260_i2c_quirks 这个函数是i2c的接口probe函数。 1. 保存ft260_device到私…...

Android上如何使用perfetto分析systrace

Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具&#xff0c;提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具&#xff0c;提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…...

React Hooks学习笔记

一、usestate的使用方法-初始化state函数 import React, { useState } from "react"; function App() {const [count, setCount] useState(0);return (<div><p>点击{count}次</p><button onClick{() > setCount(count 1)}>点击</bu…...

BGP第二日

上图为今日所用拓扑 &#xff0c;其中R1和R4&#xff0c;R3和R5为EBGP邻居&#xff0c;R1和R3为IBGP邻居&#xff0c;AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态&#xff1a;建立邻居最初的状态 2.Connect 连接状态&#xff1a;在…...

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述&#xff1a; 因业务需要使用的rabbitmq是3.7.8版本的&#xff0c;rabbitmq在3.3.0之后就允许使用guest账号的权限了&#xff0c;所以需要创建一个administrator标签的用户。 如下操作创建的用户&#xff1a; 创建完成之后就提示如下的报错&#xff1a; 注&#xff1a…...

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考&#xff1a;SecureBoot&#xff1f;多核处理器启动流程&#xff1f;PSCI启动方式&#xff1f; 一般嵌入式系统使用的都是对称多处理器&#xff08;Symmetric Multi-Processor, SMP&#xff09;系统&#xff0c;包含了多个cpu, 这几个cp…...

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…...

Android 内部保持数据的方式

Android内部保持数据的方式主要有五种&#xff0c;每种方式都有其特定的用途和优点。以下是详细的介绍&#xff1a; SQLite数据库 定义&#xff1a;SQLite是一个轻量级的、跨平台的数据库&#xff0c;所有的信息都存储在单一文件内&#xff0c;占用内存小&#xff0c;并且支持…...

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...

beyond Compare连接 openWrt 和 VsCode

连接步骤总结 1. 新建会话 -> 文件夹比较 2.点击浏览文件夹 3.在弹出页面 配置 ftp 3.1&#xff09;选中ftp 配置文件 3.2)选中ssh2 3.3)填写我们需要远端连接的主机信息 先点击连接并浏览 得到下方文件夹 弹出无效登录&#xff0c;说明需要密码 我们返回右键刚刚创建的新 …...

量化机器人能否识别市场机会?

量化机器人的设计和应用是为了通过高级算法和大数据分析&#xff0c;精确地识别和把握市场中的交易机会。这些机器人的能力不仅仅局限于执行预定的交易策略&#xff0c;更包括在复杂和快速变化的市场环境中识别利润机会。 首先&#xff0c;量化机器人能够处理和分析大量的市场…...

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别

OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板&#xff0c;自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力&#xff0c;堪称目前开发板市场中的顶尖性能&#xff0c;实在令人垂涎三尺。如此强大的板子&#xff0c;当然要亲自体验一番。今天非常荣幸地拿到…...

MongoDB教程(二):mongoDB引用shell

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…...

终极免费Redis可视化工具:Windows版RedisDesktopManager完全指南

终极免费Redis可视化工具&#xff1a;Windows版RedisDesktopManager完全指南 【免费下载链接】RedisDesktopManager-Windows RedisDesktopManager Windows版本 项目地址: https://gitcode.com/gh_mirrors/re/RedisDesktopManager-Windows 你是否厌倦了在命令行中操作Red…...

通俗易懂的C++前缀和与差分算法图文示例详解

1、前缀和 前缀和是指某序列的前n项和&#xff0c;可以把它理解为数学上的数列的前n项和&#xff0c;而差分可以看成前缀和的逆运算。合理的使用前缀和与差分&#xff0c;可以将某些复杂的问题简单化。 2、前缀和算法有什么好处&#xff1f; 先来了解这样一个问题&#xff1a…...

FPGA资源省一半?揭秘多相滤波器在抽取/内插中的高效实现结构与Xilinx IP核配置要点

FPGA资源优化实战&#xff1a;多相滤波器在采样率转换中的高效架构与Xilinx IP核深度配置 当信号处理系统面临严苛的资源约束时&#xff0c;工程师们常常需要在性能与成本之间走钢丝。多相滤波器结构就像一位精明的财务顾问&#xff0c;能帮你在FPGA资源预算紧张的情况下&#…...

创新设计与智能系统设计融合

在智能制造与工业大模型时代&#xff0c;创新设计&#xff08;以生成式AI、变型衍生、大规模定制为核心&#xff09;与智能系统设计&#xff08;以端-边-云协同、工业智能体、自主控制为核心&#xff09;的融合&#xff0c;是制造企业实现研发与生产双向闭环的终极路径 。两者的…...

深层分析C++ 二叉搜索树(BST)完全指南:从概念原理、核心操作到底层实现

在计算机科学的世界里&#xff0c;数据结构就像是建筑的基石&#xff0c;而二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;则是其中一块极为重要的基石。它不仅在算法设计、数据库管理等领域有着广泛的应用&#xff0c;而且对于理解其他更复杂的数…...

嘎嘎降AI和去AIGC深度对比:2026年按次计费和按篇计费哪个更划算完整评测分析

嘎嘎降AI和去AIGC深度对比&#xff1a;2026年按次计费和按篇计费哪个更划算完整评测分析 总有人问嘎嘎降AI&#xff0c;这篇文章把主流几款对比清楚。 综合推荐嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;99.26%达标率。不同需求有不同…...

ncmdump终极解密指南:如何快速解锁网易云音乐NCM加密文件

ncmdump终极解密指南&#xff1a;如何快速解锁网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否遇到过这样的困扰&#xff1f;在网易云音乐下载的歌曲只能在特定播放器中使用&#xff0c;换到其他设备或播…...

多平台布局时代,店群账号高效管控之道

在电商行业持续精细化运营的当下&#xff0c;店群模式仍是商家拓宽渠道、分散风险、提升规模效应的主流选择。伴随抖店、拼多多、TikTok Shop、Temu、亚马逊等国内外平台规则趋严&#xff0c;多店铺账号管理已成为制约店群商家稳定经营的关键瓶颈。传统依赖人工登记、多设备登录…...

第12期:综合优化与结业项目(工程落地与量产调优)

一、本期课程简介本期为整套TinyML嵌入式实战课程的收官总结阶段&#xff0c;旨在帮助学员打通技术壁垒&#xff0c;完成从零散知识点积累到系统化工程落地能力的蜕变。课程将全面梳理前序所有实战项目技术栈&#xff0c;涵盖传感器数据采集、数据集预处理、神经网络模型轻量化…...

量子退火优化CPS测试用例生成的技术解析

1. 量子退火在CPS测试用例生成中的应用概述在安全关键系统&#xff08;如自动驾驶、工业控制系统&#xff09;的开发过程中&#xff0c;测试用例的质量直接关系到系统的可靠性。传统测试方法面临两大核心挑战&#xff1a;一是如何在庞大的输入空间中找到最具检测效力的测试用例…...