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

文章目录

  • 前言
  • 一、介绍
  • 二、详细分析
    • 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.使用场景

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

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


总结

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

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

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

相关文章

PostgreSQL基础(二):PostgreSQL的安装与配置

文章目录 PostgreSQL的安装与配置 一、PostgreSQL的安装 二、PostgreSQL的配置 1、远程连接配置

【老王最佳实践-6】Spring 如何给静态变量注入值

有些时候,我们可能需要给静态变量注入 spring bean,尝试过使用 Autowired 给静态变量做注入的同学应该都能发现注入是失败的。 Autowired 给静态变量注入bean 失败的原因 spring 底层已经限制了,不能给静态属性注入值: 如果我…

pr视频旋转90°

1.找到视频特效“运动” 2.旋转270 3.找到“序列”---“序列设置”,更改画面大小 成品展示:

基于SSM的“医院门诊管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“医院门诊管理系统”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能模块图 医院门诊管理系统首页页面图 用户登录界面图 管…

bootstrap实现九宫格效果(猫捉老鼠游戏)

最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。 效果大致是这样的。九宫格的左上角是一只小猫图片&…

Pandas高效数据清洗与转换技巧指南【数据预处理】

三、数据处理 1.合并数据(join、merge、concat函数,append函数) Concat()函数使用 1.concat操作可以将两个pandas表在垂直方向上进行粘合或者堆叠。 join属性为outer,或默认时,返回列名并集,如&#xff…

Spring Boot集成Picocli快速入门Demo

1.什么是Picocli? Picocli是一个单文件命令行解析框架,它允许您创建命令行应用而几乎不需要代码。使用 Option 或 Parameters 在您的应用中注释字段,Picocli将分别使用命令行选项和位置参数填充这些字段。使用Picocli来编写一个功能强大的命…

市面上前 11 名的 Android 数据恢复软件

Android数据恢复软件是恢复无意中删除的文件或文件夹的必要工具。该软件还将帮助您恢复丢失或损坏的信息。本文介绍提供数据备份和磁盘克隆选项的程序,这些选项有助于在Android设备上恢复文件的过程。 如果您正在寻找一种有效的方法来恢复图像,文档&…

SpringBoot——整合Thymeleaf模板

目录 模板引擎 新建一个SpringBoot项目 pom.xml application.properties Book BookController bookList.html ​编辑 项目总结 模板引擎 模板引擎是为了用户界面与业务数据分离而产生的,可以生成特定格式的页面在Java中,主要的模板引擎有JSP&…

Python 闭包的高级用法详解

所谓闭包,就是指内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程,这个内函数称之为闭包函数。可以理解为是函数式编程中的封装。 内部函数可以使用外部函数定义的属性:外部函数调用后,返回内部函数的地…

Linux_web控制台-cockpit

1、安装cockpit [rootlocalhost ~]# dnf install cockpit -y 2、启动cockpit服务并查运行状态 [rootlocalhost ~]# systemctl start cockpit [rootlocalhost ~]# systemctl status cockpit 2、设置开机启动 [rootlocalhost ~]# vim /usr/lib/systemd/system/cockpit.servi…

局域网桌面监控软件哪个好用?良心推荐

如何有效地监控和管理内部员工的计算机使用行为,防范潜在的安全风险,提高工作效率,是众多企业管理者关注的焦点。 而一款优秀的局域网桌面监控软件无疑能为企业的IT治理提供有力支撑。 小编在此给大家推荐一款好用的局域网桌面监控软件——域…

5. C++网络编程-UDP协议的实现

UDP是无连接的。 UDP Server网络编程基本步骤 创建socket,指定使用UDP协议将socket与地址和端口绑定使用recv/send接收/发送数据 由于UDP是无连接的,直接侦听就行使用close关闭连接 这个UDP接收数据的时候用的API是recvfrom,发送数据是sendto

MCS-51伪指令

上篇我们讲了汇编指令格式,寻址方式和指令系统分类,这篇我们讲一下单片机伪指令。 伪指令是汇编程序中用于指示汇编程序如何对源程序进行汇编的指令。伪指令不同于指令,在汇编时并不翻译成机器代码,只是会汇编过程进行相应的控制…

已有yarn集群部署spark

已有yarn集群的情况下,部署spark只需要部署客户端。 一、前提条件 已部署yarn集群,部署方式参考:https://blog.csdn.net/weixin_39750084/article/details/136750613?spm1001.2014.3001.5502,我部署的hadoop版本是3.3.6已安装j…

Android Compose 九:常用组件列表 简单使用

遇事不决 先看官方文档 列表和网格 如果不需要任何滚动,通过Column 或 Row可以使用verticalScroll() 使Column滚动 Column(modifier Modifier.verticalScroll(rememberScrollState())) {for (i in 0..50){Text(text "条目>>${i}")}}显示大量列表…

从0开始linux(3)——如何读写文件

欢迎来到博主的专栏——从0开始linux 博主ID:代码小豪 文章目录 创建普通文件用文本编辑器nano写入文件如何读取文件cat命令less命令head和tail 我们前面已经了解和如何操作文件,但是目前认识的文件类型分为两类,一类是目录文件、另一类是普通…

【C#上位机应用开发实战】—— 通信模块的基础与实践

🚀 引言 在工业自动化、设备监控、物联网(IoT)等领域,上位机软件扮演着至关重要的角色。作为连接人与设备的桥梁,上位机软件不仅需要提供友好的用户界面,更需要具备高效、稳定的通信能力。今天&#xff0c…

ASP+ACCESS教师档案管理系统

3.1 系统功能模块图 3.2 E-R模型图 3.3 系统使用流程图 3.4 各个模块功能简介: 本系统分为五个功能模块,它们分别是教师信息录入模块、教师信息修改模块、教师信息查询模块、教师信息打印模块。 下面分别介绍各个模块的功能用途&#x…

第 398 场 LeetCode 周赛题解

A 特殊数组 I 模拟&#xff1a;遍历数组判断是否是一个特殊数组 class Solution { public:bool isArraySpecial(vector<int>& nums) {int r 0;while (r 1 < nums.size() && nums[r 1] % 2 ! nums[r] % 2)r;return r nums.size() - 1;} };B 特殊数组 I…