[Design Pattern] 퍼사드 패턴(Facade Pattern)

시나브로·2021년 6월 30일
0

디자인 패턴

목록 보기
11/24
post-thumbnail

퍼사드 패턴(Facade Pattern)


  • 구조(Structural) 패턴
  • 서브시스템을 더 쉽게 사용할 수 있도록 higher-level 인터페이스를 정의하고, 제공하는 패턴

  • 단순화된 인터페이스를 통해서 서브시스템을 더 쉽게 사용할 수 있도록 하기위한 용도로 쓰인다.



구조




구현


DataBase Connection을 통해 HTML 리포트 또는 PDF 리포트를 생성



MySqlHelper.class

public class MySqlHelper {

    public static Connection getMySqlDBConnection(){
        // 실제 커넥션을 리턴해야 하지만, 예제이기에 null 을 리턴하겠습니다.
        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
    }
}

OracleHelper.class

public class OracleHelper {

    public static Connection getOracleDBConnection(){
        // 실제 커넥션을 리턴해야 하지만, 예제이기에 null 을 리턴하겠습니다.
        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
    }

}
  • MySql과 Oracle Helper 생성
  • Connection 생성과 PDF, HTML Report 생성을 담당한다



HelperFacade.class

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;
    }
}
  • Client가 호출할 Class부분.
  • Enum Type을 전달받아 해당하는 DB 벤더에 맞춰 기능을 동작한다



Main.class

    public static void main(String[] args) {
        String tableName="Test";

        //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);
    }
  • Client는 깔끔하게 다양한 db에 맞춰 요청할 수 있다



장단점


  • 장점
    • 클라이언트에서는 다뤄야할 서브 시스템의 객체 수를 줄여준다
    • 클라이언트와 서브시스템간의 결합도를 낮춰준다
  • 단점
    • 클라이언트에게 서브시스템까지 숨길 수는 없다






참조:

profile
Be More!

0개의 댓글