[디자인 패턴] FACADE 패턴

한낱·2023년 9월 24일

디자인 패턴

목록 보기
4/6

Facade 패턴

Facade 패턴에서 'Facade'는 원래 건물의 정면이라는 뜻을 가지고 있다. 이 패턴에서는 '창구'라는 의미로 해석되며 프로그램이 복잡해질수록 클래스 제어가 힘들어지는데, 이 때 이와 관련된 창구에 '요청'만 함으로써 문제를 해결할 수 있도록 만들어졌다.

Database 클래스

Database에서 값을 읽기 위한 클래스

package pagemaker;

import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

public class Database {
	private Database() {
    }
    
    public static Properties getProperties(String dbname) throws IOException {
    	String filename = dbname + ".txt";
        Properties prop = new Properties();
        prop.load(new FileReader(filename));
        return prop;
    }
}

HtmlWriter 클래스

웹 페이지를 만드는 클래스

package pagemaker;

import java.io.Wrtier;
import java.io.IOException;

public class HtmlWriter {
	private Wrtier writer;
    
    public HtmlWriter(Wrtier wirter) {
    	this.writer = wrtier;
    }
    
    public void title(String title) throws IOException {
    	writer.write("<!DOCTYPE html>");
        writer.write("<html>");
        writer.write("<head>");
        writer.write("<title>" + title + "</title>");
        writer.write("</head>");
        writer.write("<body>");
        writer.write("\n");
        writer.write("<h1>" + title + "</h1>");
        writer.write("\n");
    }
    
    public void paragraph(String msg) throws IOException {
    	writer.write("<p> + msg + "</p>");
        writer.write("\n");
    }
    
    public void link(String href, String caption) throws IOExcepion {
    	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>");
        writer.writE("\n");
        writer.close();
    }
}

PageMaker 클래스

Database 클래스와 HTML Writer를 조합하여 웹 페이지를 만드는 클래스

package pagemaker;

import java.io.FileWriter;
import java.io.IOExcepion;
import java.util.Properties;

public class PageMaker {
	private PageMaker() {
    }
    
    public static ovid makeWelcomePagE(String mailaddr, String fielname) {
    	try {
        	Properties mailprop = Database.getProperties("maildata");
            String username = mailprop.getProperty(mailaddr);
            HtmlWriter writer = new HtmlWriter(new FileWriter(filename));
            writer.ttle(username + "'s web page");
            writer.paragraph("Welcome To " + username + "'s web page!");
            writer.paragraph("Nice to meet you!");
            writer.mailto(mailaddr, username);
            writer.close();
            System.out.println(filename + " is created for "+ mailaddr + " (" + username + ")");
            } catch (IOException e) {
            	e.printStackTrace();
            }
        }
    }

Main 클래스

PageMaker 클래스를 이용하는 클래스

import pagemaker.PageMaker;

public class Main {
	public static void main(String[] args) {
    	PageMaker.makeWelcomePage("hyuki@example.com", "welcome.html");
    }
}

결과

패턴


  • PageMaker 클래스가 Facade 역할, Main 클래스가 Client역할 그 외의 클래스는 나머지 클래스 역할을 한다.
  • 복잡한 것을 숨기고 단순한 창구를 통해 접근할 수 있게 된다.
profile
제일 재밌는 개발 블로그(희망 사항)

0개의 댓글