Java/design pattern builder pattern 우혁이 아빠 2012. 7. 25. 09:38 package com.tistory.temp.pattern.builder; public class BuilderTest { public static void main(String[] args) { if (args.length != 1) { usage(); System.exit(0); } if (args[0].equals("plain")) { TextBuilder textbuilder = new TextBuilder(); Director director = new Director(textbuilder); director.construct(); String result = textbuilder.getResult(); System.out.println(result); } else if (args[0].equals("html")) { HtmlBuilder htmlbuilder = new HtmlBuilder(); Director director = new Director(htmlbuilder); director.construct(); String filename = htmlbuilder.getResult(); System.out.println(filename + "가 작성되었습니다."); } else { usage(); System.exit(0); } } private static void usage() { System.out.println("Usage: java Main plain 일반텍스트로 문서작성"); System.out.println("Usage: java Main html HTML 파일로 문서작성"); } } package com.tistory.temp.pattern.builder; 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 void close() { buffer.append("==============================\n"); } public String getResult() { return buffer.toString(); } } package com.tistory.temp.pattern.builder; public abstract class Builder { public abstract void makeTitle(String title); public abstract void makeString(String str); public abstract void makeItems(String[] items); public abstract void close(); } package com.tistory.temp.pattern.builder; public class Director { private Builder builer; public Director(Builder builer) { this.builer = builer; } public void construct() { builer.makeTitle("Greeting"); builer.makeString("아침과 낮에"); builer.makeItems(new String[]{ "좋은 아침입니다.", "안녕하세요.", }); builer.makeString("밤에"); builer.makeItems(new String[]{ "안녕하세요.", "안녕히 주무세요.", "안녕히 계세요", }); builer.close(); } } package com.tistory.temp.pattern.builder; 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 + ".hmtl"; try { writer = new PrintWriter(new FileWriter(filename)); } catch (IOException e) { e.printStackTrace(); } writer.println("<head><title>" + title + "</title></head>"); 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 void close() { writer.println(""); writer.close(); } public String getResult() { return filename; } } 저작자표시