头歌 JAVA 桥接模式实验

目录

任务描述

实现方式

编程要求

测试说明

代码实现

总结


1 任务描述

某软件公司欲开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如 TXT、XML、PDF 等格式,同时该工具需要支持多种不同的数据库。

本关任务:用桥接模式对模拟程序进行框架搭建,如图。

2 实现方式

  1. 明确类中独立的维度。 独立的概念可能是: 抽象/平台, 域/基础设施, 前端/后端或接口/实现。

  2. 了解客户端的业务需求, 并在抽象基类中定义它们。

  3. 确定在所有平台上都可执行的业务。 并在通用实现接口中声明抽象部分所需的业务。

  4. 为你域内的所有平台创建实现类, 但需确保它们遵循实现部分的接口。

  5. 在抽象类中添加指向实现类型的引用成员变量。 抽象部分会将大部分工作委派给该成员变量所指向的实现对象。

  6. 如果你的高层逻辑有多个变体, 则可通过扩展抽象基类为每个变体创建一个精确抽象。

  7. 客户端代码必须将实现对象传递给抽象部分的构造函数才能使其能够相互关联。 此后, 客户端只需与抽象对象进行交互, 无需和实现对象打交道。

3 编程要求

根据提示,在右侧编辑器 Begin-End 内补充 "DataHandler.java"、"FileConvertor.java"、"PDFConvertor.java"、"XMLConvertor.java" 和 "TXTConvertor.java" 文件的代码。

4 测试说明

平台会自动从 xml 文件中读取内容,然后对你编写的代码进行测试:

预期输出: 从Oracle数据库中读取数据 转换成PDF格式的数据

预期输出: 从SQLServer数据库中读取数据 转换成TXT格式的数据

5 代码实现

DataHandler.java

java 复制代码
package step1;

public abstract class DataHandler {
    public abstract void readData();
}

这段代码定义了一个抽象类 DataHandler,它代表了数据读取的实现部分。抽象方法 readData() 强制所有继承该类的具体数据处理器(例如 OracleHandler、SQLServerHandle 等)实现各自的数据读取逻辑,从而使得系统可以支持多种不同的数据库而无需修改桥接模式的核心结构。


FileConvertor.java

java 复制代码
package step1;

public abstract class FileConvertor {
    // 持有实现部分对象引用
    protected DataHandler dataHandler;
    
    public void setDataHandler(DataHandler dataHandler) {
        this.dataHandler = dataHandler;
    }
    
    // 抽象的转换方法,由具体子类实现
    public abstract void translate();
}

这段代码定义了抽象类 FileConvertor,它作为文件转换工具的抽象层。该类中包含一个 DataHandler 类型的成员变量,用于关联具体的数据读取实现,并提供了 setDataHandler() 方法以便在客户端将具体的 DataHandler 注入进来。抽象方法 translate() 则规定了文件转换过程的基本接口,不同的文件格式转换器(例如 PDFConvertor、TXTConvertor、XMLConvertor)需要实现该方法来完成各自的转换逻辑。


PDFConvertor.java

java 复制代码
package step1;

public class PDFConvertor extends FileConvertor {
    @Override
    public void translate() {
        /********** Begin *********/
        // 调用实现部分的方法读取数据
        dataHandler.readData();
        /********** End *********/
        System.out.println("转换成PDF格式的数据");
    }
}

在 PDFConvertor.java 中,实现了 FileConvertor 的 translate() 方法。该方法首先调用 dataHandler.readData() 来读取数据库中的数据,然后输出"转换成PDF格式的数据",模拟将数据转换为 PDF 文件的过程。这展示了桥接模式中抽象部分如何委托给具体实现(DataHandler)进行数据获取,并在此基础上完成自身特有的转换操作。


TXTConvertor.java

java 复制代码
package step1;

public class TXTConvertor extends FileConvertor {
    @Override
    public void translate() {
        /********** Begin *********/
        dataHandler.readData();
        /********** End *********/
        System.out.println("转换成TXT格式的数据");
    }
}

TXTConvertor.java 同样继承了 FileConvertor 类,其 translate() 方法也先调用 dataHandler.readData() 获取数据,再输出"转换成TXT格式的数据",表明该转换器用于将数据转换成 TXT 格式。这样做的好处是,无论使用哪种数据处理器,转换器都能在调用相同的接口后完成各自的格式转换,实现了解耦和灵活扩展。


XMLConvertor.java

java 复制代码
package step1;

public class XMLConvertor extends FileConvertor {
    @Override
    public void translate() {
        /********** Begin *********/
        dataHandler.readData();
        /********** End *********/
        System.out.println("转换成XML格式的数据");
    }
}

XMLConvertor.java 的实现与前面的转换器类似。它通过调用 dataHandler.readData() 获取数据,然后输出"转换成XML格式的数据",完成将数据转换为 XML 格式的任务。此设计使得不同的文件转换器只需关注各自的格式转换逻辑,而将数据读取的部分交给专门的 DataHandler 处理,从而体现了桥接模式对"抽象化"和"实现化"分离的设计思想。

6 总结

这样,通过客户端代码配置不同的 FileConvertor 子类和 DataHandler 子类(如 OracleHandler 或 SQLServerHandle),即可实现从不同数据库读取数据并转换成不同格式的功能,而无需修改已有代码。

相关推荐
双叶83630 分钟前
(C语言)超市管理系统(测试版)(指针)(数据结构)(二进制文件读写)
c语言·开发语言·数据结构·c++
小雅痞30 分钟前
[Java][Leetcode middle] 55. 跳跃游戏
java·leetcode
PXM的算法星球32 分钟前
使用CAS操作实现乐观锁的完整指南
开发语言
com未来36 分钟前
使用 NSSM 安装 Tomcat 11.0.6 为 Windows 服务
java·windows·tomcat
TDengine (老段)42 分钟前
基于 TSBS 标准数据集下 TimescaleDB、InfluxDB 与 TDengine 性能对比测试报告
java·大数据·开发语言·数据库·时序数据库·tdengine·iotdb
养军博客43 分钟前
spring boot3.0自定义校验注解:文章状态校验示例
java·前端·spring boot
lgily-122544 分钟前
常用的设计模式详解
java·后端·python·设计模式
IT成长史1 小时前
deepseek梳理java高级开发工程师微服务面试题
java·微服务
茶本无香1 小时前
Feign+Resilience4j实现微服务熔断机制:原理与实战
java·微服务·feignclient·熔断·resilience4j
遇见火星1 小时前
Ansible模块——从控制节点向目标主机复制文件!
java·服务器·ansible