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

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;
}
}
웹 페이지를 만드는 클래스
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();
}
}
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();
}
}
}
PageMaker 클래스를 이용하는 클래스
import pagemaker.PageMaker;
public class Main {
public static void main(String[] args) {
PageMaker.makeWelcomePage("hyuki@example.com", "welcome.html");
}
}


