Facade Pattern
Facade Pattern được sử dụng để giúp ứng dụng client tương tác dễ dàng với hệ thống. Giả sử chúng ta có một ứng dụng với một tập các interface để sử dụng csdl MySQL/Oracle và để tạo ra các loại báo cáo khác nhau như báo cáo dạng HTML, dạng PDF, .v.v. Như vậy chúng ta sẽ có một tập các interface để làm việc với các csdl khác nhau. Bây giờ một ứng dụng client có thể sử dụng những interface này. Tuy nhiên khi độ phức tạp tăng lên hoặc tên các phương thức của các interface gây lẫn lộn sẽ tạo ra các khó khăn cho ứng dụng client. Do đó Facade Pattern cung cấp một wrapper interface trên đỉnh các interface ở trên để trợ giúp ứng dụng client trong trường hợp này.
1. Facade Design Pattern – Set of Interfaces
package com.journaldev.design.facade; import java.sql.Connection; 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.journaldev.design.facade; import java.sql.Connection; 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 } }
2. Facade Design Pattern Interface
package com.journaldev.design.facade; import java.sql.Connection; 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; } }
3. Facade Design Pattern Client Program
package com.journaldev.design.test; import java.sql.Connection; import com.journaldev.design.facade.HelperFacade; import com.journaldev.design.facade.MySqlHelper; import com.journaldev.design.facade.OracleHelper; 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); } }
No comments :
Post a Comment