Facade Design Pattern
2018-03-22 本文已影响6人
zheting
package com.sheting.design.pattern.demo5;
import java.sql.Connection;
/**
* @Author SheTing
* @Time 2018/3/22 8:26
*/
public class MySqlHelper {
public static Connection getMySqlDBConnection() {
//get MySql DB connection using connection parameters
return null;
}
public void generateMySqlPDFReport(String tableName, Connection con) {
//get data from table and generate pdf report
}
public void generateMySqlHTMLReport(String tableName, Connection con) {
//get data from table and generate pdf report
}
}
package com.sheting.design.pattern.demo5;
import java.sql.Connection;
/**
* @Author SheTing
* @Time 2018/3/22 8:26
*/
public class OracleHelper {
public static Connection getOracleDBConnection(){
//get Oracle DB connection using connection parameters
return null;
}
public void generateOraclePDFReport(String tableName, Connection con){
//get data from table and generate pdf report
}
public void generateOracleHTMLReport(String tableName, Connection con){
//get data from table and generate pdf report
}
}
package com.sheting.design.pattern.demo5;
import java.sql.Connection;
/**
* @Author SheTing
* @Time 2018/3/22 8:27
*/
public class HelperFacade {
public static void generateReport(DBTypes dbType, ReportTypes reportType, String tableName) {
Connection con = null;
switch (dbType) {
case MYSQL:
con = MySqlHelper.getMySqlDBConnection();
MySqlHelper mySqlHelper = new MySqlHelper();
switch (reportType) {
case HTML:
mySqlHelper.generateMySqlHTMLReport(tableName, con);
break;
case PDF:
mySqlHelper.generateMySqlPDFReport(tableName, con);
break;
}
break;
case ORACLE:
con = OracleHelper.getOracleDBConnection();
OracleHelper oracleHelper = new OracleHelper();
switch (reportType) {
case HTML:
oracleHelper.generateOracleHTMLReport(tableName, con);
break;
case PDF:
oracleHelper.generateOraclePDFReport(tableName, con);
break;
}
break;
}
}
public static enum DBTypes {
MYSQL, ORACLE;
}
public static enum ReportTypes {
HTML, PDF;
}
}
package com.sheting.design.pattern.demo5;
import java.sql.Connection;
/**
* @Author SheTing
* @Time 2018/3/22 8:28
*/
public class FacadePatternTest {
public static void main(String[] args) {
String tableName = "Employee";
//generating MySql HTML report and Oracle PDF report without using Facade
Connection con = MySqlHelper.getMySqlDBConnection();
MySqlHelper mySqlHelper = new MySqlHelper();
mySqlHelper.generateMySqlHTMLReport(tableName, con);
Connection con1 = OracleHelper.getOracleDBConnection();
OracleHelper oracleHelper = new OracleHelper();
oracleHelper.generateOraclePDFReport(tableName, con1);
//generating MySql HTML report and Oracle PDF report using Facade
HelperFacade.generateReport(HelperFacade.DBTypes.MYSQL, HelperFacade.ReportTypes.HTML, tableName);
HelperFacade.generateReport(HelperFacade.DBTypes.ORACLE, HelperFacade.ReportTypes.PDF, tableName);
}
}
门面模式应用
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志System。