设计模式--桥接模式

实验9:桥接模式

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

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

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

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

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

类图

源代码

java 复制代码
/**
 * 抽象汽车类
 */
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的行驶方法
    @Override
    public void drive()
    {
        String carType = "bus";
        this.road.bedrive(carType);
    }
}

public class Car extends Vehicle
{
    //car的行驶方法
    @Override
    public void drive()
    {
        String carType = "car";
        this.road.bedrive(carType);
    }
}

public interface Road
{
    void bedrive(String carType);
}

public class ConcreteRoad implements Road
{
    //水泥路
    @Override
    public void bedrive(String carType)
    {
        System.out.println(carType+"在水泥路行驶");
    }
}

public class PitchRoad implements Road
{
    //沥青路
    @Override
    public 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 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <className>Tutorial_9.ConcreteRoad</className>
    <className>Tutorial_9.Bus</className>
</config>

运行效果

相关推荐
饼干哥哥10 小时前
一夜之间,全世界的 Agent 能力提高了一个档次
设计模式·agent·代码规范
Kel11 小时前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
我登哥MVP13 小时前
进 Gang of Four 设计模式:建造者模式
java·设计模式·建造者模式
进击的前栈1 天前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞1 天前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研1 天前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
workflower1 天前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研1 天前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
Kel1 天前
万物皆 Runnable:LangChain 如何用一个接口统一模型、链与图
人工智能·设计模式·架构
ttod_qzstudio2 天前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式