写点什么

设计模式的艺术 第十章桥接设计模式练习(设计一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如 txt、xml、pdf 等格式,同时该工具需要支持多种不同的数据库)

作者:代廉洁
  • 2022 年 8 月 29 日
    浙江
  • 本文字数:1443 字

    阅读完需:约 5 分钟

Sunny 软件公司欲开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如 txt、xml、pdf 等格式,同时该工具需要支持多种不同的数据库。试使用桥接模式对其进行设计。


一、类结构图



两个独立变化的维度:转换文件和数据采集维度;

转换文件设计为抽象类,数据采集设计为实现类接口;

数据采集的设计结合访问数据库的适配器模式。

二、典型实现代码

抽象文件转换类:抽象类
// 抽象文件转换类:抽象类public abstract class AbstractFileTransformer {
protected DbReadImplementor impl;
public abstract void fileTransform();}
复制代码


抽象数据库读取实现类:实现类接口
// 抽象数据库读取实现类:实现类接口public abstract class DbReadImplementor {    public abstract void readDb();}
复制代码


A 格式文件转换器 :扩充抽象类
// A格式文件转换器 :扩充抽象类public class FileTransformerA extends AbstractFileTransformer {
public FileTransformerA(DbReadImplementor dbReadImplementor) { this.impl= dbReadImplementor; }
@Override public void fileTransform() { impl.readDb(); System.out.println("开始转换为对应格式A的文件"); }}
复制代码


B 格式文件转换器 :扩充抽象类
//B格式文件转换器 :扩充抽象类public class FileTransformerB extends AbstractFileTransformer {
public FileTransformerB(DbReadImplementor dbReadImplementor) { this.impl= dbReadImplementor; }
@Override public void fileTransform() { impl.readDb(); System.out.println("开始转换为对应格式B的文件"); }}
复制代码


数据库读取适配器:适配器类
// 数据库读取适配器:适配器类public class DbReadAdapter extends DbReadImplementor {
private DbReader dbReader;
public void setDbReader(DbReader dbReader) { this.dbReader = dbReader; }
@Override public void readDb() { dbReader.doReadDb(); }}
复制代码


数据库读取抽象类:适配者接口
// 数据库读取抽象类:适配者接口public abstract class DbReader {    /**     * 获取数据源数据     */    public abstract void doReadDb();}
复制代码


数据库读取类:具体适配者
// 数据库读取类:具体适配者public class MysqlDbReader extends DbReader {    @Override    public void doReadDb() {        System.out.println("从Mysql数据库获取数据");    }}
复制代码


数据库读取类:具体适配者
// 数据库读取类:具体适配者public class OracleDbReader extends DbReader {    @Override    public void doReadDb() {        System.out.println("从Oracle数据库获取数据");    }}
复制代码


客户端代码:
public class Client {    public static void main(String[] args) {        AbstractFileTransformer fileTransformer;        DbReadImplementor dbReadImplementor;        DbReader dbReader;        DbReadAdapter dbReadAdapter;
dbReader = new MysqlDbReader(); dbReadAdapter = new DbReadAdapter(); dbReadAdapter.setDbReader(dbReader); dbReadImplementor = dbReadAdapter; fileTransformer = new FileTransformerA(dbReadImplementor); fileTransformer.fileTransform(); }}
复制代码


编译并运行程序,输出的如下结果:

从Mysql数据库获取数据开始转换为对应格式A的文件
复制代码


发布于: 刚刚阅读数: 3
用户头像

代廉洁

关注

还未添加个人签名 2019.10.15 加入

还未添加个人简介

评论

发布
暂无评论
设计模式的艺术 第十章桥接设计模式练习(设计一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时该工具需要支持多种不同的数据库)_代廉洁_InfoQ写作社区