디자인 패턴 ~Facade~

1. 소개



GoF의 디자인 패턴에서 Facade 패턴을 요약합니다.

2. Facade 패턴이란?


  • Facade라는 영어 단어는 정면이라는 의미가 됩니다.
  • 큰 프로그램을 사용해 처리를 실시하려면 , 관련되어 있는 많은 클래스를 적절히 제어해야 합니다. 그 처리를 실시하기 위한 창구를 준비해 두면, 많은 클래스를 개별적으로 제어하지 않아도 됩니다.
  • Facade 패턴은 복잡한 시스템에 대한 간단한 창구를 준비하는 방법입니다.
  • GoF 디자인 패턴은 구조와 관련된 디자인 패턴으로 분류됩니다.

  • 3. 샘플 클래스 다이어그램





    4. 샘플 프로그램



    사용자의 웹 페이지를 만드는 프로그램입니다.

    4-1. PageMaker 클래스



    이메일 주소에서 사용자의 웹 페이지를 만드는 클래스입니다. 이 클래스는 Facade가 됩니다.

    PageMaker.java
    package pagemaker;
    
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Properties;
    
    public class PageMaker {
    
        private PageMaker() {}
    
        public static void makeWelcomePage(String mailaddr, String filename) {
            try {
                Properties mailprop = Database.getProperties("maildata");
                String username = mailprop.getProperty(mailaddr);
                HtmlWriter writer = new HtmlWriter(new FileWriter(filename));
                writer.title("Welcome to " + username + "'s page!");
                writer.paragraph(username + "のページへようこそ。");
                writer.paragraph("メールまっていますね。");
                writer.mailto(mailaddr, username);
                writer.close();
                System.out.println(filename + " is created for " + mailaddr + " (" + username + ")");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    4-2. HtmlWriter 클래스



    HTML 파일을 작성하는 클래스입니다.

    v.java
    package pagemaker;
    
    import java.io.IOException;
    import java.io.Writer;
    
    public class HtmlWriter {
    
        private Writer writer;
    
        public HtmlWriter(Writer writer) {
            this.writer = writer;
        }
    
        public void title(String title) throws IOException {
            writer.write("<html>");
            writer.write("<head>");
            writer.write("<title>" + title + "</title>");
            writer.write("</head>");
            writer.write("<body>\n");
            writer.write("<h1>" + title + "</h1>\n");
        }
    
        public void paragraph(String msg) throws IOException {
            writer.write("<p>" + msg + "</p>\n");
        }
    
        public void link(String href, String caption) throws IOException {
            paragraph("<a href=\"" + href + "\">" + caption + "</a>");
        }
    
        public void mailto(String mailaddr, String username) throws IOException {
            link("mailto:" + mailaddr, username);
        }
    
        public void close() throws IOException {
            writer.write("</body>");
            writer.write("</html>\n");
            writer.close();
        }
    }
    

    4-3. Database 클래스



    이메일 주소에서 사용자 이름을 얻는 클래스입니다.

    Database.java
    package pagemaker;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class Database {
    
        private Database() {}
    
        public static Properties getProperties(String dbname) {
            String filename = dbname + ".txt";
            Properties prop = new Properties();
            try {
                prop.load(new FileInputStream(filename));
            } catch (IOException e) {
                System.out.println("Warning: " + filename + " is not found.");
            }
            return prop;
        }
    }
    

    4-4. maildata 데이터베이스



    데이터베이스 파일입니다.

    maildata.txt
    tanaka@test.com=Taro Tanaka
    yamada@test.com=Hanako Yamada
    suzuki@test.com=Daisuke Suzuki
    

    4-5. Main 클래스



    메인 처리를 실시하는 클래스입니다.

    Main.java
    import pagemaker.PageMaker;
    
    public class Main {
        public static void main(String[] args) {
            PageMaker.makeWelcomePage("[email protected]", "welcome.html");
        }
    }
    

    4-6. 실행 결과





    5. 장점



    클래스나 메소드가 많이 있으면, 프로그래머는 어느 것을 사용해 좋은지 헤매거나, 호출 순서에 주의하거나 해야 합니다. 주의해야 한다는 것은 그만큼 실수하기 쉽다는 것입니다.
    Facade 패턴을 사용하면 인터페이스를 줄이고 복잡한 것을 단순히 보여줄 수 있습니다.
    인터페이스의 수가 적다는 것은 외부와의 결합이 희소하다는 표현도 할 수 있습니다. 즉, 완만한 결합이 되어, 패키지를 부품으로서 재이용하기 쉽게 해 줍니다.

    6. GitHub


  • htps : // 기주 b. 코 m / 이타나카 730 /

  • 7. 디자인 패턴 목록


  • GoF 디자인 패턴 요약

  • 8. 참고



    이번 기사 및 샘플 프로그램은 이하의 서적을 바탕으로 작성하였습니다.
  • Java 언어로 배우는 디자인 패턴 입문

  • 매우 이해하기 쉽고 공부가되었습니다. 감사합니다.
    디자인 패턴이나 샘플 프로그램에 대한 설명이 상세하게 쓰여져 있으므로, 꼭 서적의 분도 봐 주세요.

    좋은 웹페이지 즐겨찾기