当前位置: 首页 > 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>

运行效果

http://www.lryc.cn/news/267065.html

相关文章:

  • redis基本用法学习(C#调用StackExchange.Redis操作redis)
  • 单挑力扣(LeetCode)SQL题:1308. 不同性别每日分数总计
  • Vue3组合式-依赖注入provideinject
  • SRE 与 DevOps 的不同之处
  • 【湖仓一体尝试】MYSQL和HIVE数据联合查询
  • SpringCloud跨服务调用失败Seata无法回滚解决办法
  • OSG三维渲染引擎编程学习之一百零一:“第十一章:OSG粒子” 之 “11.2 粒子模拟过程”
  • Autosar CAN开发03(从实际应用认识CAN总线的物理层)
  • vue中父子组件传值
  • 【网络编程】基于UDP数据报实现回显服务器/客户端程序
  • sqlilabs第三十二三十三关
  • 第二十一章博客
  • PSoc62™开发板之按键控制LED
  • Vue-Pinina基本教程
  • 大批量数据导出csv,平替导出excel性能优化解决方案封装工具类
  • C++ Qt开发:Charts绘制各类图表详解
  • 【SassVue】仿网易云播放器动画
  • CentOS进入单用户模式
  • 微信小程序~如何设置页面的背景色
  • 图灵日记之java奇妙历险记--输入输出方法数组
  • CSS新手入门笔记整理:CSS3弹性盒模型
  • OCP NVME SSD规范解读-1
  • 大规模和复杂问题挑战——分治思想来应战
  • 六西格玛的科技漩涡——张驰咨询如何促成企业变革
  • 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
  • 【案例】图片预览
  • ubuntu 18/20/22 安装 mysql 数据库
  • 通过U盘:将电脑进行重装电脑
  • C# SqlSugar 数据库 T4模板
  • ARM AArch64的TrustZone架构详解(下)