JAVA设计模式之 桥接模式【Bridge Pattern】
1、概述 2、适用处景 3、UML类图 针对上面的业务场景-桥接模式-示例结构图: 4、参与者 5、用例学习<以适用处景里的业务场景作为代码设计> /**
* JDBC 驱动连接收理类
* @author lvzb.software@qq.com
*
*/
public class JdbcDriverManager {
public String connectAndReadOracle(){
// 摹拟连接Oracle数据库的代码
System.out.println("已成功连接到Oracle数据库");
// 模式 省略 从数据库中获得内容的代码
String content = "已成功从Oracle数据库中读取到了内容";
return content;
}
public String connectAndReadMySql(){
// 摹拟连接MySql数据库的代码
System.out.println("已成功连接到MySql数据库");
// 模式 省略 从数据库中获得内容的代码
String content = "已成功从MySql数据库中读取到了内容";
return content;
}
public String connectAndReadSqlServer(){
// 摹拟连接Sql Server数据库的代码
System.out.println("已成功连接到Sql Server数据库");
// 模式 省略 从数据库中获得内容的代码
String content = "已成功从Sql Server数据库中读取到了内容";
return content;
}
} 2、<角色:实现类接口> FileExportImpl.java /**
* 获得文件内容、连接数据库来源接口
* @author lvzb.software@qq.com
*
*/
public interface FileExportImpl {
/**
* 读取数据库中的内容
* @param jdbcDriver
* @return
*/
public String readContent();
} 3、<角色:具体实现类> FileExportFromOracle.java /**
* 从Oracle数据库获得内容
* @author lvzb.software@qq.com
*
*/
public class FileExportFromOracle implements FileExportImpl {
@Override
public String readContent() {
JdbcDriverManager jdbcDriver = new JdbcDriverManager();
return jdbcDriver.connectAndReadOracle();
}
} 4、<角色:具体实现类> FileExportFromMySql.java /**
* 从MySql数据库获得内容
* @author lvzb.software@qq.com
*
*/
public class FileExportFromMySql implements FileExportImpl {
@Override
public String readContent() {
JdbcDriverManager jdbcDriver = new JdbcDriverManager();
return jdbcDriver.connectAndReadMySql();
}
} 5、<角色:具体实现类> FileExportFromSqlServer.java /**
* 从Sql Server数据库获得内容
* @author lvzb.software@qq.com
*
*/
public class FileExportFromSqlServer implements FileExportImpl {
@Override
public String readContent() {
JdbcDriverManager jdbcDriver = new JdbcDriverManager();
return jdbcDriver.connectAndReadSqlServer();
}
} 6、<角色:抽象类> FileExportAbstraction.java /**
* 文件格式导出 抽象类
* @author lvzb.software@qq.com
*
*/
public abstract class FileExportAbstraction {
protected FileExportImpl fileSouce;
public void setFileSource(FileExportImpl fileSouce){
this.fileSouce = fileSouce;
}
public abstract void exportFile();
} 7、<角色:扩充抽象类> TxtFileExport.java /**
* Txt文件格式导出具体类
* @author lvzb.software@qq.com
*
*/
public class TxtFileExport extends FileExportAbstraction {
@Override
public void exportFile() {
String readContent = fileSouce.readContent();
System.out.println(readContent + ",将内容导出为.txt格式");
}
} 8、<角色:扩充抽象类> XmlFileExport.java /**
* xml文件格式导出具体类
* @author lvzb.software@qq.com
*
*/
public class XmlFileExport extends FileExportAbstraction {
@Override
public void exportFile() {
String readContent = fileSouce.readContent();
System.out.println(readContent + ",将内容导出为.xml格式");
}
} 9、<角色:扩充抽象类> PdfFileExport.java /**
* pdf文件格式导出具体类
* @author lvzb.software@qq.com
*
*/
public class PdfFileExport extends FileExportAbstraction {
@Override
public void exportFile() {
String readContent = fileSouce.readContent();
System.out.println(readContent + ",将内容导出为.pdf格式");
}
} 10、客户端测试类: Client.java public class Client {
public static void main(String[] args) {
FileExportImpl fileOracle = new FileExportFromOracle();
FileExportImpl fileMySql = new FileExportFromMySql();
FileExportImpl fileSqlServer = new FileExportFromSqlServer();
FileExportAbstraction fileTxtExport = new TxtFileExport();
FileExportAbstraction fileXmlExport = new XmlFileExport();
FileExportAbstraction filePdfExport = new PdfFileExport();
// 如果我们要从Oracle中导出xml格式的数据
fileXmlExport.setFileSource(fileOracle);
fileXmlExport.exportFile();
System.out.println("--------------------
");
// 如果我们要从Oracle中导出txt格式的数据
fileTxtExport.setFileSource(fileOracle);
fileTxtExport.exportFile();
System.out.println("--------------------
");
// 如果我们要从MySql中导出pdf格式的数据
filePdfExport.setFileSource(fileMySql);
filePdfExport.exportFile();
}
} 11、履行结果 以下: 已成功连接到Oracle数据库
已成功从Oracle数据库中读取到了内容,将内容导出为.xml格式
--------------------
已成功连接到Oracle数据库
已成功从Oracle数据库中读取到了内容,将内容导出为.txt格式
--------------------
已成功连接到MySql数据库
已成功从MySql数据库中读取到了内容,将内容导出为.pdf格式 12、后续系统扩大 因而可知 在两个变化维度中任意扩大1个维度,都不需要修改原有系统、提高了系统的扩大性和可保护性。 6、其他 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |