프로그래밍/자바 디자인패턴

디자인패턴 Facade 패턴

가카리 2012. 8. 6. 21:12
반응형

Facade 패턴

 

Facade 는 창구라는 뜻입니다. 버스표를 구입할때 창구에 어디갈지 말하고 돈만 내면 됩니다.

 

직원이 컴퓨터로 예약하고 바코드를 읽고 돈계산 작업을 하는것은 창구 밖에서는 알지 못합니다.

 

이런식으로 밖에서 보이는 것은 단순하게하고 안에서는 1. 컴퓨터 예약작업, 2. 바코드 읽기 3.

 

계산을 처리하고 결과만 고객에게 보여주는 역할을 하는 패턴입니다.

 

패키지

이름

해설

pagemaker

Database

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

HtmlWriter

HTML 파일을 작성하는 클래스

PageMaker

메일 주소에서 사용자의 웹페이지를 작성하는 클래스

Anonymous

Main

동작 테스트용 클래스

 

 

 

Database 클래스

 

package kch;

 

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Properties;

 

public class Database {

              

        private Database(){//new에서 인스턴스를 생성시키지 않기 위한 private 선언

                      

               }

       

               public static Properties getProperties(String dbname){

                      

                       //데이터 베이스 이름에서 Properties 얻는다.

                       String filename = dbname + ".txt";

                       Properties prop = new Properties();//해쉬테이블을 만듬.

                      

                       try{

                      

                              prop.load(new FileInputStream(filename));//파일로부터 key data값을 해쉬테이블에 넣음

                      

                       }catch(IOException e){

                      

                              System.out.println("Warning : " + filename + " is not found.");

                      

                       }

                      

                       return prop;

               }

       

       

}

 

maildata.txt 파일

 

kch@naver.com=kch

baram918@naver.com=baram

gakari@nate.com=gakari

ikimono@yahoo.com=ikimono

 

 

HtmlWriter 클래스

package kch;

 

import java.io.IOException;

import java.io.Writer;

 

public class HtmlWriter {

       

               /**

                * @uml.property  name="writer"

                */

               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();

               }

}

 

 

PageMaker 클래스

 

package kch;

 

import java.io.FileWriter;

import java.io.IOException;

import java.util.Properties;

 

public class PageMaker {

        private PageMaker(){//인스턴스를 안만듬 그래서 private

              

        }

        public static void makeWelcomePage(String mailaddr, String filename){

              

               try{

                       //-------------------------Database 클래스부분-------------------------------

                       //Database.getProperties static 메소드라서 이렇게 인스턴스 없이 call 수 있음.

                       Properties mailprop = Database.getProperties("maildata");

                       //이줄까지 하면 file로부터 값을 읽어서 해쉬테이블에 넣었음.

                       //-----------------------------------------------------------------------------

                      

                      

                       //-------------------------HtmlWriter 클래스부분--------------------------------

                       String username = mailprop.getProperty(mailaddr);

                       //이줄가지 하면 mailaddr 키값으로 해쉬테이블에서 데이터를 찾음.

                      

                       HtmlWriter writer = new HtmlWriter(new FileWriter(filename));

                       // new FileWriter("welcome.html")과 같음

                       // 생성하면 바로 파일이 만들어짐

                      

                      

                       //----------파일에 내용을 쓴느 부분.-----------

                       writer.title("Welcome to " + username +" 's page!");

                       writer.paragraph("메일을 기다리고 있습니다.");

                       writer.mailto(mailaddr,  username);

                      

                       //----------파일을 닫음.-----------

                       writer.close();

                       //-------------------------------------------------------------------------------

                      

                      

                       System.out.println(filename + " is created for " + mailaddr + " (" + username + ")");

              

               }catch(IOException e){

              

                       e.printStackTrace();

              

               }

        }

 

}

 

Main 클래스

package kch;

 

public class Main {

               public static void main(String[] args){

                       PageMaker.makeWelcomePage("baram918@naver.com", "welcome.html");

               }

}

 

 

결과 welcome.html파일

 

 

반응형