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

深度学习设计模式之桥接模式

文章目录

  • 前言
  • 一、介绍
  • 二、详细分析
    • 1.核心组成
    • 2.实现步骤
    • 3.代码示例
    • 4.优缺点
      • 优点
      • 缺点
    • 5.使用场景
  • 总结


前言

桥接模式是将抽象部分与实现部分分离,使它们都可以独立的变化。


一、介绍

桥接模式是结构型设计模式,主要是将抽象部分与实现部分分离,使它们都可以独立的变化。桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。通俗来讲是通过组合来桥接其它的行为/维度。

二、详细分析

1.核心组成

  • 抽象化角色 :主要负责定义出该角色的行为 ,并包含一个对实现化对象的引用。

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

    • 实现化角色 :定义实现化角色的接口,包含角色必须的行为和属性,并供扩展抽象化角色调用。

    • 具体实现化角色 :给出实现化角色接口的具体实现。
      在这里插入图片描述

2.实现步骤

  1. 先创建实现角色接口;
  2. 创建实现角色的具体实现类;
  3. 创建抽象角色,持有实现角色接口类;
  4. 创建抽象角色扩展类,继承抽象角色。

3.代码示例

实现角色类

/*** 实现角色类*/
public interface CatColour {/*** 获取颜色*/void getColour();
}

具体实现角色类

/*** 接口实现类*/
public class RedCatColour implements CatColour{@Overridepublic void getColour() {System.out.println("红色");}
}
public class SkyBlueCatColour implements CatColour{@Overridepublic void getColour() {System.out.println("天蓝色");}
}

抽象角色类

/*** 抽象类接口*/
public abstract class Cat {// 将接口作为一个属性来修饰 抽象类protected CatColour catColour;// set方法设置属性Capublic void setCatColour(CatColour catColour) {this.catColour = catColour;}/*** 行驶汽车*/abstract void run();}

抽象扩展实现类

/*** 抽象实现类*/
public class XiaomiSu7Cat extends Cat{public XiaomiSu7Cat(CatColour colour) {super.setCatColour(colour);}@Overridevoid run() {catColour.getColour();System.out.println("小米su7");}
}
public class BmwCat extends Cat{public BmwCat(CatColour catColour) {super.setCatColour(catColour);}@Overridevoid run() {catColour.getColour();System.out.println("宝马车");}
}

测试类

    public static void main(String[] args) {XiaomiSu7Cat xiaomiSu7Cat = new XiaomiSu7Cat(new SkyBlueCatColour());xiaomiSu7Cat.run();}

结果
在这里插入图片描述

4.优缺点

优点

  • 抽象和实现的分离。桥接模式使用"对象间的关联关系"解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。

  • 优秀的扩展能力。桥接模式提高了系统的扩展性,在两个变化维度中任意扩展一个维度都不需要修改原有系统,符合开闭原则。

缺点

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

5.使用场景

  • 系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性;

  • 不想使用继承导致类的个数急剧增加。


总结

以上就是今天的内容了,本文简单介绍了桥接设计模式的使用和优缺点,提供代码示例以供参考。

相关文章:

深度学习设计模式之桥接模式

文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 桥接模式是将抽象部分与实现部分分离,使它们都可以独立的变化。 一、介绍 桥接模式是结构型设计模式,主要是将抽象部分与实现部分分离&#x…...

设计模式 17 组合模式 Composite Pattern

设计模式 17 组合模式 Composite Pattern 1.定义 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设…...

【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档

这篇发表于2020 WWW 上的会议论文,提出一种MNS方式的负样本采样方法。众所周知,MF方法难以解决冷启动问题,于是进化出双塔模型,但是以双塔模型为基础的召回模型的好坏十分依赖负样本的选取。为了解决Batch内负样本带来的选择性偏差…...

串行低功耗芯片间媒体总线(SLIMbus)介绍

文章目录 SLIMbus简介slimbus设备和设备类Manager DeviceFramer DeviceInterface DeviceGeneric Device (Function)SLIMbus组件简单的SLIMbus组件复杂的SLIMbus组件SLIMbus的DATA和CLKSLIMbus的Clock Frequencies和GearsCells, Slots, Subframes, Frames, and...

esp32-S3 使用自带的大模型,实现本地文字转语言tts

目录 CMakeLists.txt文件中: 初始化以及实际运用代码: 在partitions.csv 内存分配文件中,添加voice_data项...

Redis事务(1)

什么是事务? Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执行。 但是注意体会 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: redis 没有 “回滚机制”. 只能做到这些操作 “批量执⾏”. 不能做到 “⼀个失败就…...

202206青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 有如下 Python 程序, 包含 lambda 函数, 运行该程序后, 输出的结果是? ( ) g = lambda x,y:x*yprint(g(2,3))A :2 B :3 C :6 D :8 正确答案:C 试题解析: g = lambda x, y: x*y, lambda 函数返回参数 x 和 y 的积, 因此选 C。 第 2 题 【单选…...

大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛

1、功能简介 (1)用户注册与用户登录 (2)手机搜索、手机比拼、手机个性化推荐 (3)点击搜索的手机图片会就用户行为,轮播展示用户行为,推荐点击次数靠前的手机 (4&#xf…...

Leetcode 环形链表|| 快慢指针解法

但是我们不知道 aaa 的值,该怎么办?依然是使用双指针法。考虑构建一个指针,此指针需要有以下性质:此指针和 slow 一起向前走 a 步后,两者在入口节点重合。那么从哪里走到入口节点需要 aaa 步?答案是链表头节…...

出书,是「盖你自己的房子」你知道吗?

出书是「盖你自己的房子」 尊敬的出书盟友: 你好!我希望这封信能够激发您对出书和阅读的热情。 在当今信息爆炸的时代,每个人都有机会分享自己的故事、思想和知识。而书籍作为一种流传百年的媒体,依旧承载着无限的力量和影响力…...

深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥

系列文章目录 更新ing... MySQL操作全攻略:库、表、数据、事务全面指南深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能PyMySQL:连接P…...

驾校管理系统-手把手调试搭建

驾校管理系统-手把手调试搭建 驾校管理系统-手把手调试搭建...

知能行——考研数学利器

知能行使用体验全记录 首先,我先介绍一下自己,我是2018级的,2022年6月毕业,本科沈阳工业大学(双非),今年二战,专业课自动控制原理,数二英二,目标是江南大学控…...

pod 库发布脚本

repo_tag.sh 文件 #!/bin/zsh# 私有库名称 #PODNAME${PWD##*/} PODNAME"LBHorizontalCenterLayout"function obtain_git_tag {# 类似 "s.version 0.0.1"VERSION_STRINGgrep -E s.version.* ${PODNAME}.podspecTAGtr -cd "[0-9.]" <<&…...

Java 8 新特性:深入理解 Lambda 表达式的强大与应用

Java 8 新特性&#xff1a;深入理解 Lambda 表达式的强大与应用 Lambda 表达式是 Java 8 引入的重要特性之一&#xff0c;它允许将匿名函数&#xff08;即无名称的函数&#xff09;作为参数传递给方法&#xff0c;简化了代码的编写&#xff0c;使代码更加简洁和易读。本文将深…...

HTML5 Canvas图形绘制技术应用

HTML5 Canvas图形绘制技术应用 目录 Canvas基础知识基本绘图操作路径操作文本绘制图像绘制变换复合图形与剪切阴影渐变动画与交互高级技巧...

JMETER工具:以录制手机app为例

JMETER工具&#xff1a;以录制手机app为例子 JMETER安装和环境配置 pc需要安装jdk&#xff0c;并进行jdk的环境配置&#xff0c;安装好jdk并配置好后&#xff0c;通过命令行输入java –version出现以下界面就表示安装成功&#xff1a; &#xff08;对应的jdk版本不可太低&…...

PDF文件权限密码保护:如何去除及解决方法

如果你忘记了PDF文件密码&#xff0c;不用担心&#xff01;PDF解密、找回密码、去除密码的方法简单易行。只需两步&#xff1a;1、打开百度搜索“密码帝官网”&#xff1b;2、在官网页面点击“立即开始”&#xff0c;上传文件&#xff0c;稍等片刻即可找回密码。这种方法安全、…...

【电子信息(工程)】电子通信创新创业教育综合

电子通信创新创业教育 阐述电磁场、电磁波和电磁频谱及应用一、电磁场 法拉第根据电流与磁场的关系,提出了电磁感应定律:如果电磁场中有处于运动状态下的闭合回路导体存在,流经该导体磁场的磁场强度和磁场量,通常都会出现相应的变化,电磁感应电流由此而产生。随后,英国的…...

光伏无人机巡检的工作原理是什么?

随着科技的飞速发展&#xff0c;无人机技术已经深入到众多领域&#xff0c;其中光伏电站的巡检工作便是其应用的一个重要方向。光伏无人机巡检&#xff0c;通过搭载各种先进的传感器和设备&#xff0c;对光伏电站进行全面的、高效的、安全的检测&#xff0c;为电站的运维管理提…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...