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

结构型-桥接模式(Bridge Pattern)

概述

桥接模式(Bridge Pattern)是一种结构型设计模式,将抽象部分和实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,将抽象部分和实现部分分离开来,从而使它们可以独立地变化。这种分离使得抽象部分和实现部分可以独立地扩展和修改,互不影响。

桥接模式由两个独立的层次结构组成:抽象部分和实现部分。抽象部分定义了抽象类和接口,它包含了对实现部分的引用,并且定义了抽象方法。实现部分定义了接口和具体类,它实现了抽象部分定义的接口,并且提供了具体的实现。抽象部分和实现部分之间通过关联关系进行连接。

优点:

  • 可以将抽象部分和实现部分独立地进行扩展和修改,互不影响。这样可以减少系统的复杂性。
  • 可以在运行时动态地将抽象部分和实现部分进行组合。这样可以根据需要来选择不同的实现方式。
  • 可以减少继承关系的使用。继承关系是一种静态的关系,它在编译时就确定了,而桥接模式是一种动态的关系,它在运行时可以动态地进行组合。

缺点:

  • 增加了系统的复杂性,因为需要定义抽象部分和实现部分的接口和维护它们之间的关系。
  • 对于简单的系统,桥接模式可能会增加不必要的复杂性。

使用场景:

  • 当一个类存在两个或多个不相关的维度时,可以使用桥接模式将其拆分成两个或多个独立的层次结构。
  • 当需要修改一个类的实现细节时,可以使用桥接模式将其与其他类分离,便于进行独立的修改。
  • 当希望避免在接口和实现部分之间出现强紧耦合关系时,可以使用桥接模式。

示例

抽象电视和具体电视机制造厂商:电视可以是液晶、等离子和CRT电视机,而抽象电视可以根据不同的电视制造厂商进行操作。

首先定义一个抽象类,代表抽象部分:

public abstract class TV {protected Manufacturer manufacturer;protected TV(Manufacturer manufacturer) {this.manufacturer = manufacturer;}public abstract void produce();
}

接下来定义一个实现部分的接口:

public interface Manufacturer {public void manufacture();
}

为抽象类和接口添加具体的实现,如下所示:

public class Sony implements Manufacturer {public void manufacture() {System.out.println("Manufacturing TV by Sony");}
}public class Samsung implements Manufacturer {public void manufacture() {System.out.println("Manufacturing TV by Samsung");}
}

最后,我们将实现部分的具体实现注入到抽象类中,如下所示:

public class SmartTV extends TV {public SmartTV(Manufacturer manufacturer) {super(manufacturer);}public void produce() {System.out.print("Producing Smart TV... ");manufacturer.manufacture();}
}

现在,我们可以使用桥接模式来生产不同制造商的智能电视,如下所示:

public class BridgePatternDemo {public static void main(String[] args) {TV sonySmartTV = new SmartTV(new Sony());sonySmartTV.produce();TV samsungSmartTV = new SmartTV(new Samsung());samsungSmartTV.produce();}
}

输出结果为:

Producing Smart TV... Manufacturing TV by Sony
Producing Smart TV... Manufacturing TV by Samsung

相关文章:

结构型-桥接模式(Bridge Pattern)

概述 桥接模式(Bridge Pattern)是一种结构型设计模式,将抽象部分和实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,将抽象部分和实现部分分离开来,从而使它们可以独立地变化。…...

基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 💥1 概述 小波哈尔法(WHM)是一种求解一维非线性初值问题(IVP)的数值方法。它基于小波分析的思想&#xf…...

前端(Electron Nodejs)如何读取本地配置文件

使用electron封装了前端界面之后,最终打包为一个客户端(exe)。但是,最近项目组内做CS(c开发)的,想把所有的配置都放进安装目录的配置文件中(比如config.json)。这做法&am…...

没有 telnet 不能测试端口?容器化部署最佳的端口测试方式

写在前面 生产中遇到,整理笔记在容器中没有 telnet ,如何测试远程端口理解不足小伙伴帮忙指正 他的一生告诉我们,不能自爱就不能爱人,憎恨自己也必憎恨他人,最后也会像可恶的自私一样,使人变得极度孤独和悲…...

漏洞发现-BurpSuite插件-Fiora+Fastjson+Shiro

BurpSuite插件安装 插件:Fiora Fiora是LoL中的无双剑姬的名字,她善于发现对手防守弱点,实现精准打击。该项目为PoC框架nuclei提供图形界面,实现快速搜索、一键运行等功能,提升nuclei的使用体验。 该程序即可作为burp插…...

Elasticsearch-倒排索引

Elasticsearch和Lucene的关系 Lucene 是一个开源、免费、高性能、纯 Java 编写的全文检索引擎,可以算作是开源领域最好的全文检索工具包。ElasticSearch 是基于Lucene实现的一个分布式、可扩展、近实时性的高性能搜索与数据分析引擎。 Lucene索引层次结构 Lucene的…...

pagehelper与mybatis-plus冲突的解决办法

背景: springcloud项目开发新功能时因想使用mybatis-plus,原有功能只使用了mybatis,但在开发时发现某个公共模块使用了com.github.pagehelper,且很多模块都集成了该模块依赖(为了保证原有功能不发生问题,…...

解决使用Timer时出现Task already scheduled or cancelled异常的问题

在使用java.util.Timer和java.util.TimerTask执行定时任务时,如果在调用Timer的schedule或scheduleAtFixedRate方法时,报错如下: java.lang.IllegalStateException: Task already scheduled or cancelled 说明当前Timer对象已经执行结束或被取…...

P1175 后缀表达式

题意 传送门 P1175 表达式的转换 题解 编码运算符的优先级,线性复杂度将中缀表达式转换为后缀表达式。为了方便输出,可以用类似对顶栈的结构,初始时右侧栈为后缀表达式;对于每一步计算,右侧栈不断弹出数字到左侧栈&…...

【HashMap】49. 字母异位词分组

49. 字母异位词分组 解题思路 创建一个哈希容器 key是每一个字母异位词 排序之后的词 List是所有的字母异位词因为所有的字母异位词排序之后的结果都是一样的增强for循环遍历字符串数组将每一个字符串转换为字符数组因为字母异位词排序之后 都是一样的将排序之后的字符数组 转…...

golang实现多态

Go 通过接口来实现多态。在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 package mainimport "fmt"type Income in…...

formatter的用法,深拷贝, Object.assign 方法实战。

1. :formatter的用法 :formatter 接受一个函数作为参数&#xff0c;这个函数有三个参数&#xff1a;row&#xff0c;column 和 cellValue。row 是当前行的数据&#xff0c;column 是当前列的数据&#xff0c;cellValue 是当前单元格的值。 <el-table-column prop"SYS…...

Windows上安装和使用git到gitoschina和github上_亲测

Windows上安装和使用git到gitoschina和github上_亲测 git介绍与在windows上安装创建SSHkey在gitoschina使用 【git介绍与在windows上安装】 Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 相关介绍可以参考 <百度百科>…...

MATLAB算法实战应用案例精讲-【深度学习】预训练模型GPTXLNet

目录 GPT 1. 介绍 1.1 GPT的动机 2. 模型结构 3. GPT训练过程 3.1 无监督的预训练...

Spring data JPA常用命令

简介 Spring Data JPA是Spring框架的一部分&#xff0c;它提供了一个简化的方式来与关系型数据库进行交互。JPA代表Java持久化API&#xff0c;它是Java EE规范中定义的一种对象关系映射&#xff08;ORM&#xff09;标准。Spring Data JPA在JPA的基础上提供了更高级的抽象&…...

Excel的使用

1.EXCEL诞生的意义 1.1 找到想要的数据 1.2 提升输入速度 2.数据分析与可视化操作 目的是提升数据的价值和意义 3.EXCEL使用的内在意义和外在形式 4.EXCEL的价值 4.1 解读及挖掘数据价值 4.2 协作板块 4.3 展示专业度 4.4 共享文档内容 5.人的需求》》软件功能...

大数据课程D4——hadoop的MapReduce

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解MapReduce的作用和特点; ⚪ 掌握MapReduce的组件; ⚪ 掌握MapReduce的Shuffle; ⚪ 掌握MapReduce的小文件问题; ⚪ 掌握MapReduce的压缩机制; ⚪ 掌握MapReduce的推测执行机制…...

java策略模式

在Java中&#xff0c;策略模式&#xff08;Strategy Design Pattern&#xff09;用于定义一系列算法&#xff0c;并将每个算法封装成单独的类&#xff0c;使得它们可以互相替换&#xff0c;让客户端在使用算法时不需要知道具体的实现细节。策略模式是一种行为型设计模式&#x…...

Vue2封装自定义全局Loading组件

前言 在开发的过程中&#xff0c;点击提交按钮&#xff0c;或者是一些其它场景总会遇到Loading加载框&#xff0c;PC的一些UI库也没有这样的加载框&#xff0c;无法满足业务需求&#xff0c;因此可以自己自定义一个&#xff0c;实现过程如下。 效果图 如何封装&#xff1f; 第…...

docker 搭建jenkins

1、拉取镜像 docker pull jenkins/jenkins:2.4162、创建文件夹 mkdir -p /home/jenkins_mount chmod 777 /home/jenkins_mount3、运行并构建容器 docker run --restartalways -d -p 10240:8080 -p 10241:50000 -v /home/jenkins_mount:/var/jenkins_home -v /etc/localtime:…...

基于yolov10的工地安全帽检测系统 有技术文档 能实现图像,视频和摄像实时检测 深度学习 python Django

一、系统涉及的技术 框架&#xff1a;pytorch 模型&#xff1a;yolo10n 编程语言&#xff1a;python 数据库&#xff1a;SQLite 界面&#xff1a;后端python Django&#xff0c;前端 Vue3 项目类型&#xff1a;目标检测 二、多模态检测能力 图像检测&#xff1a;支持用户…...

PT助手Plus终极配置指南:三步实现智能自动化下载生态

PT助手Plus终极配置指南&#xff1a;三步实现智能自动化下载生态 【免费下载链接】PT-Plugin-Plus PT 助手 Plus&#xff0c;为 Microsoft Edge、Google Chrome、Firefox 浏览器插件&#xff08;Web Extensions&#xff09;&#xff0c;主要用于辅助下载 PT 站的种子。 项目地…...

数字孪生:从制造到城市,虚拟照进现实的系统工程

数字孪生已从概念走向规模化落地&#xff0c;其核心价值在于“以虚控实”。对软件测试从业者而言&#xff0c;这不仅是新场景的拓展&#xff0c;更是一场测试范式的革命——测试对象从单一软件系统&#xff0c;升级为“物理实体数字模型数据流控制闭环”的复杂异构系统。本文将…...

揭秘100.64.0.0/10:运营商级NAT如何重塑IPv4网络格局

1. 100.64.0.0/10&#xff1a;这个神秘IP段到底是什么&#xff1f; 第一次在路由器后台看到100.64.0.1这个IP时&#xff0c;我整个人都懵了——这既不是常见的192.168局域网地址&#xff0c;也不是公网IP。就像发现自家门牌号突然变成了酒店房间号&#xff0c;这种违和感促使我…...

MATLAB plot()函数实战:从数据到专业图表的完整工作流

1. 数据准备&#xff1a;从原始数据到可绘图格式 第一次用MATLAB画图时&#xff0c;我直接把Excel表格里的数据复制粘贴进去&#xff0c;结果plot()函数报错让我懵了半天。后来才发现&#xff0c;数据格式转换是绘图的第一步关键操作。假设你手头有一组温度传感器采集的时序数据…...

从零到一:基于51单片机与DS1302的智能万年历系统设计与实现

1. 项目背景与核心功能 每次看到桌面上那些动辄几百块的智能时钟&#xff0c;我都会想&#xff1a;这东西真的需要这么贵吗&#xff1f;作为一个玩了多年51单片机的老鸟&#xff0c;我决定用最基础的STC89C52芯片搭配DS1302时钟模块&#xff0c;打造一个功能不输商业产品的智能…...

重生之我用 AI 复活了我的同事

阅读本文大概需要 2.8 分钟。在写这篇文章之前先解答上篇文章评论区反映的两个问题&#xff1a;第一个问题&#xff0c;有人读完文章说&#xff0c;张哥&#xff0c;那以后是用 AI 还是不用呢&#xff1f;当然要用了&#xff0c;而且是鼓励大家全面使用。我文章本意是 AI 发展之…...

云顶之弈策略优化工具:TFT Overlay如何提升游戏决策效率

云顶之弈策略优化工具&#xff1a;TFT Overlay如何提升游戏决策效率 【免费下载链接】TFT-Overlay Overlay for Teamfight Tactics 项目地址: https://gitcode.com/gh_mirrors/tf/TFT-Overlay 在云顶之弈激烈的对战中&#xff0c;玩家常常面临装备合成路径混乱、羁绊触发…...

黑丝空姐-造相Z-Turbo场景应用:为你的内容创作提供无限灵感

黑丝空姐-造相Z-Turbo场景应用&#xff1a;为你的内容创作提供无限灵感 1. 镜像概述与核心能力 黑丝空姐-造相Z-Turbo是一款基于Xinference部署的文生图模型服务&#xff0c;通过gradio提供直观的交互界面。该镜像专注于生成特定风格的视觉内容&#xff0c;为创意工作者提供高…...

从腾讯AI架构师那里听到的:他们正在重点研究的4个新前沿AI方向

腾讯AI架构师揭秘&#xff1a;当下重点突破的4个前沿AI方向 清晨的深圳滨海大厦会议室里&#xff0c;腾讯AI Lab的架构师张明&#xff08;化名&#xff09;放下咖啡杯&#xff0c;翻开电脑里的项目进度表——屏幕上跳动的图表里&#xff0c;“MoE轻量化” “多模态因果推理” “…...