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

设计模式--桥接模式

实验9:桥接模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解桥接模式的动机,掌握该模式的结构;

2、能够利用桥接模式解决实际问题。

[实验任务]:两个维度的桥接模式

用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。

类图 

源代码 

/*** 抽象汽车类*/
public abstract class Vehicle
{protected Road road;//为汽车设置行驶的马路public void setRoad(Road road){this.road = road;}//抽象行驶方法public abstract void drive();
}public class Bus extends Vehicle
{//bus的行驶方法@Overridepublic void drive(){String carType = "bus";this.road.bedrive(carType);}
}public class Car extends Vehicle
{//car的行驶方法@Overridepublic void drive(){String carType = "car";this.road.bedrive(carType);}
}public interface Road
{void bedrive(String carType);
}public class ConcreteRoad implements Road
{//水泥路@Overridepublic void bedrive(String carType){System.out.println(carType+"在水泥路行驶");}
}public class PitchRoad implements Road
{//沥青路@Overridepublic void bedrive(String carType){System.out.println(carType + "在沥青路行驶");}
}import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;public class XMLUtil
{public static Object getBean(String args){try{DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File("src/main/resources/config9.xml"));Node classNode = null;NodeList nl = doc.getElementsByTagName("className");if (args.equals("road")){classNode = nl.item(0).getFirstChild();} else if (args.equals("vehicle")){classNode = nl.item(1).getFirstChild();}String cName = classNode.getNodeValue();Class c = Class.forName(cName);Object obj = c.newInstance();return obj;}catch (Exception e){e.printStackTrace();return null;}}
}public class Client
{public static void main(String[] args){//从xml配置文件动态获取汽车类型Vehicle vehicle = (Vehicle) XMLUtil.getBean("vehicle");//动态获取路的类型Road road = (Road) XMLUtil.getBean("road");//给汽车设置行驶的路vehicle.setRoad(road);//调用汽车的行驶方法vehicle.drive();}
}

config9.xml

<?xml version="1.0" encoding="UTF-8"?>
<config><className>Tutorial_9.ConcreteRoad</className><className>Tutorial_9.Bus</className>
</config>

运行效果

相关文章:

设计模式--桥接模式

实验9&#xff1a;桥接模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解桥接模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用桥接模式解决实际问题。 [实验任务]&#xff1a;两个维度的桥接模式 用桥接模式…...

redis基本用法学习(C#调用StackExchange.Redis操作redis)

StackExchange.Redis是基于C#的高性能通用redis操作客户端&#xff0c;也属于常用的redis客户端之一&#xff0c;本文学习其基本用法。   新建Winform项目&#xff0c;在Nuget包管理器中搜索并安装StackExchange.Redis&#xff0c;如下图所示&#xff1a;   StackExchange.…...

单挑力扣(LeetCode)SQL题:1308. 不同性别每日分数总计

相信很多学习SQL的小伙伴都面临这样的困境&#xff0c;学习完书本上的SQL基础知识后&#xff0c;一方面想测试下自己的水平&#xff1b;另一方面想进一步提升&#xff0c;却不知道方法。 其实&#xff0c;对于技能型知识&#xff0c;我的观点一贯都是&#xff1a;多练习、多实…...

Vue3组合式-依赖注入provideinject

一、注意点 专门强调了是3.0且是组合式&#xff0c;不是2.0不支持也不是选项式不支持provide&&inject&#xff0c;是支持但是有很明显的弊端&#xff0c;不建议使用 二、场景 官方的解释: 通常情况下&#xff0c;当我们需要从父组件向子组件传递数据时&#xff0c;会…...

SRE 与 DevOps 的不同之处

尽管网站可靠性工程 (SRE) 理念早在 2003 年就由 Google 的 Ben Treynor Sloss 提出&#xff0c;但其近年来却一直受到追捧。随着 DevOps 实践已经在许多组织中牢固确立&#xff0c;两者之间的冲突是否已经显现&#xff1f;SRE 只不过是一种过时的趋势吗&#xff1f;是 SRE 补充…...

【湖仓一体尝试】MYSQL和HIVE数据联合查询

爬了两天大大小小的一堆坑&#xff0c;今天把一个简单的单机环境的流程走通了&#xff0c;记录一笔。 先来个完工环境照&#xff1a; mysqlhadoophiveflinkicebergtrino 得益于IBM OPENJ9的优化&#xff0c;完全启动后的内存占用&#xff1a; 1&#xff09;执行联合查询后的…...

SpringCloud跨服务调用失败Seata无法回滚解决办法

遇到的问题 在微服务项目中 有A、B、C三个服务 其中 A调用B服务 &#xff0c;B调用C&#xff0c; 这些就是跨服务调用了&#xff0c;在A服务中 还调用了一个当前模块执行插入数据的方法(在这里我就叫它为AA 也就是mybatis/spring管理的本地事务) A服务开启全局事务注解 Globa…...

OSG三维渲染引擎编程学习之一百零一:“第十一章:OSG粒子” 之 “11.2 粒子模拟过程”

目录 第十一章 OSG粒子 11.2 粒子模拟过程 第十一章 OSG粒子 虚拟现实中有很多效果,如雨效、雪效、雾效等,这些都可以通过粒子条统来实现。一个真实的粒子系统的模式能使三维场景达到更好的效果。 粒子系统是一个非常复杂的粒子模拟过程。在OSG中,专门定义了新的名字空间o…...

Autosar CAN开发03(从实际应用认识CAN总线的物理层)

建议同时阅读本专栏的&#xff1a; Autosar CAN开发03&#xff08;从实际应用认识CAN总线的物理层&#xff09; Autosar CAN开发04&#xff08;从实际应用认识CAN报文&#xff09; Autosar CAN开发05&#xff08;从实际应用认识CAN波特率&#xff09; 前言 在上一章的《AU…...

vue中父子组件传值

父传子 传: 在"标签"上传属性 <Card :name"name"></Card> 接: 在props中 export default {props: {name: String},setup(props) {console.log(props.name);} } 子传父 传: 触发,给一个事件传值 setup(props,{emit}) {emit("get…...

【网络编程】基于UDP数据报实现回显服务器/客户端程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 前言 我们如果…...

sqlilabs第三十二三十三关

Less-32&#xff08;GET - Bypass custom filter adding slashes to dangerous chars) 手工注入 由 宽字符注入可知payload 成功触发报错 http://192.168.21.149/Less-32/ ?id1%df 要写字符串的话直接吧字符串变成ascii码 注意16进制的表示方式 自动注入 sqlmap -u http:…...

第二十一章博客

计算机应用实现了多台计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xff0c;相互之间可以交换数据。编写网络应用程序前&#xff0c;首先必须明确所要使用的网络协议…...

PSoc62™开发板之按键控制LED

实验目的 使用板子上的用户自定义按键控制LED亮灭&#xff0c;当按键按下时LED亮起来&#xff0c;不按下则不亮 电路图 按键电路 板子有两组按键&#xff0c;分别是系统复位按键和用户自定义按键&#xff0c;这里我们选择控制用户自定义按键&#xff0c;可以看到MCU_USER_B…...

Vue-Pinina基本教程

前言 官网地址&#xff1a;Pinia | The intuitive store for Vue.js (vuejs.org) 看以下内容&#xff0c;需要有vuex的基础&#xff0c;下面很多概念会直接省略&#xff0c;比如state、actions、getters用处含义等 1、什么是Pinina Pinia 是 Vue 的存储库&#xff0c;它允许您跨…...

大批量数据导出csv,平替导出excel性能优化解决方案封装工具类

阿丹&#xff1a; 有些业务逻辑需要在导出非常大量的数据&#xff0c;几百甚至几千万的数据这个时候再导出excel来对于性能都不是很友好&#xff0c;这个时候就需要替换实现思路来解决这个问题。 本文章提供了两种解决的方案&#xff0c;也是两种从数据库中拿取数据的方式一种是…...

C++ Qt开发:Charts绘制各类图表详解

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。 …...

【SassVue】仿网易云播放器动画

简介 仿网易云播放动画 效果图&#xff08;效果图&#xff09; 最终成品效果 动画组件 src/components/music/MusicPlayAnimate.vue <template><div class"music-play"><div></div><div></div><div></div></di…...

CentOS进入单用户模式

一、重启 二、出现内核选项 按“e” 三、编辑这一行 输入 rw init/sysroot/bin/sh 四、进入单用户模式 ctrlx 进入 五、切换目录 chroot /sysroot 六、然后你就操作你的系统了。 修改密码等等...

微信小程序~如何设置页面的背景色

微信小程序~如何设置页面的背景色 众所周知&#xff0c;微信小程序每个页面由.json&#xff0c;.scss&#xff0c;.ts&#xff0c;.wxml这四个文件组成。 有的小伙伴会发现&#xff0c;需要给页面加背景色的时候&#xff0c;只需在此页面的.scss文件中写个page{background-colo…...

开源创富的三大支柱:技术、流量与商业化的完美结合

开源创富的三大支柱&#xff1a;技术、流量与商业化的完美结合 关键词&#xff1a;开源项目、技术壁垒、流量运营、商业化闭环、社区生态、价值变现、开源经济学 摘要&#xff1a;很多人对“开源”的理解停留在“免费送代码”&#xff0c;但实际上&#xff0c;开源是一套用技术…...

明日方舟素材库:从游戏资产到创意引擎的技术解密

明日方舟素材库&#xff1a;从游戏资产到创意引擎的技术解密 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 在数字创作的广阔天地中&#xff0c;专业级游戏素材往往被锁在商业游戏的围…...

BQ34Z100-G1电量计配置不求人:用咸鱼EV2400+BqStudio完成电池组参数学习的保姆级教程

BQ34Z100-G1电量计配置实战&#xff1a;从零搭建高精度电池管理系统 在新能源和储能系统蓬勃发展的今天&#xff0c;精确的电池电量计量已成为电池管理系统(BMS)的核心竞争力。德州仪器(TI)的BQ34Z100-G1阻抗跟踪电量计凭借其出色的精度和稳定性&#xff0c;在工业储能、电动工…...

Barlow字体完全指南:如何用这款开源字体提升设计质感

Barlow字体完全指南&#xff1a;如何用这款开源字体提升设计质感 【免费下载链接】barlow Barlow: a straight-sided sans-serif superfamily 项目地址: https://gitcode.com/gh_mirrors/ba/barlow 想要为你的设计项目寻找一款既现代又实用的免费字体吗&#xff1f;Barl…...

大语言模型底层逻辑:从LM到Agent的完整工作流解析!

本文深入剖析了大语言模型&#xff08;LM&#xff09;的核心架构与工作原理&#xff0c;重点介绍了Token作为数据处理单元、Context作为临时记忆体的作用&#xff0c;以及Prompt、Tool、MCP等关键组件如何协同运作。文章还探讨了Agent的自主决策系统与Agent Skill的任务定制机制…...

从零到自动化:手把手教你用nRF Connect搭建个人BLE设备测试流水线

从零到自动化&#xff1a;手把手教你用nRF Connect搭建个人BLE设备测试流水线 在物联网设备开发中&#xff0c;蓝牙低功耗(BLE)技术的测试验证一直是让开发者头疼的环节。传统手动测试不仅效率低下&#xff0c;还容易因人为因素导致结果不一致。对于资源有限的硬件创业团队或个…...

JSON Lint for PHP:让JSON验证不再是一场噩梦

JSON Lint for PHP&#xff1a;让JSON验证不再是一场噩梦 【免费下载链接】jsonlint JSON Lint for PHP 项目地址: https://gitcode.com/gh_mirrors/jso/jsonlint 你是否曾因一个JSON格式错误而花费数小时调试&#xff1f;是否在接收外部API数据时&#xff0c;因为格式不…...

如何快速修复分区表:开源数据恢复工具的完整指南

如何快速修复分区表&#xff1a;开源数据恢复工具的完整指南 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 你是否曾因为误删除重要文件而懊恼不已&#xff1f;是否遇到过分区丢失导致数据无法访问的困境&a…...

当代酷刑:如厕等信号

如厕等信号&#xff0c;属于当代十大酷刑之一。作为社会观察理性分析的结合体&#xff0c;今天&#xff0c;我想写一些这物理世界的墙&#xff0c;也是这消费世界的墙。你有没有过这样的感受&#xff1f;不管你家里换了多么厉害的宽带&#xff0c;多么高端前沿的路由器&#xf…...

保姆级教程:用TensorRT 8.5和Python实现ArcFace动态Batch推理(附完整代码)

从零实现ArcFace动态Batch推理&#xff1a;TensorRT 8.5实战手册 人脸识别技术在实际业务场景中往往需要处理海量并发请求&#xff0c;而传统单张图片推理模式难以满足实时性要求。本文将手把手带您完成PyTorch训练的ArcFace模型到TensorRT动态Batch推理的完整部署流程&#xf…...