头歌 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),即可实现从不同数据库读取数据并转换成不同格式的功能,而无需修改已有代码。

相关推荐
Suwg2094 分钟前
【Java导出word】使用poi-tl轻松实现Java导出数据到Word文档
java·开发语言·word·poi-tl
坚持拒绝熬夜7 分钟前
JVM的一些知识
java·jvm·笔记·java-ee
水w9 分钟前
【pyCharm Git】根据dev分支新建dev_y分支,本地也新建dev_y分支,并将代码提交到Gitlab上的新分支dev_y上。
开发语言·git·python·pycharm·pull·push·branch
范哥来了1 小时前
python 数据可视化matplotib库安装与使用
开发语言·python·信息可视化
laimaxgg1 小时前
Qt窗口控件之颜色对话框QColorDialog
开发语言·前端·c++·qt·命令模式·qt6.3
wkm9561 小时前
Ubuntu Qt: no service found for - “org.qt-project.qt.mediaplayer“
开发语言·qt·ubuntu
小画家~2 小时前
第三:go 操作mysql
开发语言·mysql·golang
修炼成精2 小时前
C#实现的一个简单的软件保护方案
java·开发语言·c#
乌云暮年2 小时前
算法刷题整理合集(四)
java·开发语言·算法·dfs·bfs
二进制人工智能2 小时前
【QT 多线程示例】两种多线程实现方式
开发语言·qt