728x90
출처 : 책 - java 언어로 배우는 디자인 패턴 입문
15. Facade - 단순한 창구
1. 목적
- 상호 관련된 많은 클래스들을 적절하게 제어하기 위해 API(창구)같은 클래스가 필요하다.
- 똑같이 반복되는 복잡한 내부를 보기 좋게 감추기 위함이다.
- facade는 프랑스어에서 나온 말로 건물의 정면 이라는 의미이다.
- 개발자라면 한번정도는 해본 적 있을 디자인 패턴이다.
2. 예제
(1) Database
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;
}
}
(2) HtmlWriter
package pagemaker;
import java.io.Writer;
import java.io.IOException;
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();
}
}
(3) PageMaker
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) Main
import pagemaker.PageMaker;
public class Main {
public static void main(String[] args) {
PageMaker.makeWelcomePage("youngjin@youngjin.com", "welcome.html");
}
}
728x90
'개발 > 디자인 패턴' 카테고리의 다른 글
[Java 언어로 배우는 디자인 패턴 입문] 상태를 관리하기 17. Observer (0) | 2021.01.14 |
---|---|
[Java 언어로 배우는 디자인 패턴 입문] 단순화하기 16. Mediator (0) | 2021.01.13 |
[Java 언어로 배우는 디자인 패턴 입문] 구조를 돌아다니기 14. Chain of Responsibility (0) | 2021.01.12 |
[Java 언어로 배우는 디자인 패턴 입문] 구조를 돌아다니기 13. Visitor (0) | 2021.01.11 |
[Java 언어로 배우는 디자인 패턴 입문] 동일시하기 12. Decorator (0) | 2021.01.11 |
댓글