某软件公司要开发一个数据转工具,可以将数据库中的数据转换成多种文件格式,例如TXT、XML、PDF等格式,同时该工具需要支持多种不同的数据库。试使用桥接模式对其进行设计,并使用Java代码编程模拟实现。
类图如下:
20软件2
第一步,定义一个抽象类FileConvertor(所有文件转换器的抽象类)
public abstract class FileConvertor
{
protected DataHandler handler;
public abstract void convert(String filename);
public void setHandler(DataHandler handler)
{
this.handler=handler;
}
}
第二步,定义实体类
TXTConvertor:将文件转换为TXT格式
public class TXTConvertor extends FileConvertor
{
public void convert(String filename)
{
handler.readData();
System.out.println("文件名:"+filename+",转换为TXT格式文件");
}
}
PDFConvertor:将文件转换为PDF格式
public class PDFConvertor extends FileConvertor
{
public void convert(String filename)
{
handler.readData();
System.out.println("文件名:"+filename+",转换为PDF格式文件");
}
}
XMLConvertor:将文件转换为XML格式
public class XMLConvertor extends FileConvertor
{
public void convert(String filename)
{
handler.readData();
System.out.println("文件名:"+filename+",转换为XML格式文件");
}
}
第三步,定义数据库操作的接口
public interface DataHandler
{
public void readData();
}
第四步,定义实体类,数据库的操作器
OracleHandler:
(Oracle数据库)
public class OracleHandler implements DataHandler
{
public void readData()
{
System.out.print("导出oracle数据,");
}
}
SQLServerHandler:
(SQLSever数据库)
public class SQLServerHandler implements DataHandler
{
public void readData()
{
System.out.print("导出sqlsever数据,");
}
}
第五步,定义XMLUtils类,根据传入的参数type来调用实体类
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.*;
public class XMLUtils {
public static Object getBean(String type) {
try {
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=dFactory.newDocumentBuilder();
Document doc;
doc=builder.parse(new File("src\\Day07\\config.xml"));
NodeList nl=null;
Node classNode=null;
String cName=null;
nl=doc.getElementsByTagName("className");
if("Handler".equals(type)) {
classNode=nl.item(0).getFirstChild();
}
else if("Convertor".equals(type)) {
classNode=nl.item(1).getFirstChild();
}
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) {
DataHandler handler = (DataHandler) XMLUtils.getBean("Handler");
FileConvertor convertor = (FileConvertor) XMLUtils.getBean("Convertor");
convertor.setHandler(handler);
convertor.convert("yxxx");
}
}
第七步,写配置文件(className分别为OracleHandler和TXTConvertor时的情况)
测试结果: