加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

设计模式第9篇:外观设计模式

发布时间:2020-12-12 13:21:58 所属栏目:百科 来源:网络整理
导读:一.外观设计模式所解决的问题 外观设计模式为子系统中的一组接口提供统一的接口,这种统一的接口屏蔽了直接调用子系统时的逻辑关系,使得调用子系统时更容易。 二.外观设计模式用例 假如一个应用中有两个接口MysqlHelper.class和OracleHelper.class,两个接

一.外观设计模式所解决的问题

外观设计模式为子系统中的一组接口提供统一的接口,这种统一的接口屏蔽了直接调用子系统时的逻辑关系,使得调用子系统时更容易。

二.外观设计模式用例

假如一个应用中有两个接口MysqlHelper.class和OracleHelper.class,两个接口功能分别是连接mysql和oracle数据库,然后生成HTML报表或者PDF报表,代码说明如下:

MysqlHelper.class和OracleHelper.class

import java.sql.Connection;

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
    }
}
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
    }
    
}

外观类HelperFacade.class

import java.sql.Connection
class
HelperFacade{ public static void generateReport(DatabaseType dbType,ReportType 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=MySqlHelper.getMySqlDBConnection(); OracleHelper oracleHelper=new OracleHelper(); switch (reportType){ case HTML: oracleHelper.generateOracleHTMLReport(tableName,con); break; case PDF: oracleHelper.generateOraclePDFReport(tableName,con); break; } } } public static enum DatabaseType{ MYSQL,ORACLE } public static enum ReportType{ HTML,PDF } }

直接调用子接口和调用统一接口(外观类)对比:

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);
    }

}

三.外观设计模式使用场景

1.外观设计模式可以运用在任何开发阶段,通常用在接口数量越来越多、系统变得复杂的时候。

2.子接口不应该有外观类的引用。

3.子接口提供的功能应该相似,因为外观接口就是通过包装子接口来提供一个接口来做一些相似的功能。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读