최근 포토로그


2008/08/05 00:17

[DesignPattern - Builder] sample1 study. note

Design Pattern - Builder

1. 클래스다이어그램
2. Source
  • Builder.java
    package com.dazzilove.builder.sample1;

    public abstract class Builder {
    public abstract void makeTitle(String title);
    public abstract void makeString(String str);
    public abstract void makeItems(String[] items);
    public abstract Object getResult();
    }
  • Director.java
    package com.dazzilove.builder.sample1;

    public class Director {
    private Builder builder;

    public Director(Builder builder) {
    this.builder = builder;
    }

    public Object construct() {
    builder.makeTitle("Greeting");
    builder.makeString("아침과 낮에");
    builder.makeItems(new String[] { "좋은 아침입니다.", "안녕하세요." });
    builder.makeString("밤에");
    builder.makeItems(new String[] { "안녕하세요.", "안녕히 주무세요.", "안녕히 계세요." });
    return builder.getResult();
    }
    }
  • TextBuilder.java
    package com.dazzilove.builder.sample1;

    public class TextBuilder extends Builder {

    private StringBuffer buffer = new StringBuffer();

    @Override
    public void makeTitle(String title) {
    buffer.append("==============================\n");
    buffer.append("『" + title + "』");
    buffer.append("\n");
    }

    @Override
    public void makeString(String str) {
    buffer.append('■' + " " + str + "\n");
    buffer.append("\n");
    }

    @Override
    public void makeItems(String[] items) {
    for(int i=0; i<items.length; i++) {
    buffer.append("-" + " " + items[i] + "\n");
    }
    buffer.append("\n");
    }

    @Override
    public Object getResult() {
    buffer.append("==============================\n");
    return buffer.toString();
    }
    }
  • HTMLBuilder.java
    package com.dazzilove.builder.sample1;

    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;

    public class HTMLBuilder extends Builder {

    private String filename;
    private PrintWriter writer;

    @Override
    public void makeTitle(String title) {
    filename = title + ".html";
    try {
    writer = new PrintWriter(new FileWriter(filename));
    } catch(IOException e) {
    e.printStackTrace();
    }
    writer.println("<html><head><title>" + title + "</title></head><body>");
    writer.println("<h1>" + title + "</h1>");
    }

    @Override
    public void makeString(String str) {
    writer.println("<p>" + str + "</p>");
    }

    @Override
    public void makeItems(String[] items) {
    writer.println("<ul>");
    for(int i=0; i<items.length; i++) {
    writer.println("<li>" + items[i] + "</li>");
    }
    writer.println("</ul>");
    }

    @Override
    public Object getResult() {
    writer.println("</body></html>");
    writer.close();
    return filename;
    }
    }
  • Main.java
    package com.dazzilove.builder.sample1;

    public class Main {
    public static void main(String[] args) {
    if(args.length != 1) {
    usage();
    System.exit(0);
    }

    if("plain".equals(args[0])) {
    Director director = new Director(new TextBuilder());
    String result = (String) director.construct();
    System.out.println(result);
    } else if("html".equals(args[0])) {
    Director director = new Director(new HTMLBuilder());
    String filename = (String) director.construct();
    System.out.println(filename + "이 작성되었습니다.");
    } else {
    usage();
    System.exit(0);
    }
    }

    public static void usage() {
    System.out.println("Usage : java Main plain 일반텍스트 문서작성");
    System.out.println("Usage : java Main html HTML 파일 문서작성");
    }
    }
3. 결과출력

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://dazzilove.egloos.com/tb/662865 [도움말]

핑백

  • dazzilove : 디자인 패턴 공부 2008-08-05 01:22:17 #

    ... 를 기술해야 한다. sample1 : "Java 언어로 배우는 디자인 패턴 입문" Chapter6. Prototype - 복사해서 인스턴스를 만든다.Builder pattern sample1 : "Java 언어로 배우는 디자인 패턴 입문" Chapter7. Builder - 복잡한 인스턴스를 조립한다. ... more

덧글

덧글 입력 영역



미투데이

문화꽃 키우기