Builderパターン
Templateパターン的でもある。Factory形式でインスタンスを得てもいいかもしれない。だめ、ちょっと混乱してきた。
% find . -name "*.java" -print0 |xargs -0 cat [] public interface Builder { void makeTitle(String str); void makeString(String str); void makeItems(String[] items); void close(); } public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void construct() { builder.makeTitle("Greeting"); builder.makeString("朝から昼にかけて"); builder.makeItems(new String[] { "おはようございます。", "こんにちは" }); builder.makeString("夜に"); builder.makeItems(new String[] { "こんばんは", "おやすみなさい", "さようなら" }); builder.close(); } } import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class HTMLBuilder implements Builder { private String filename; private PrintWriter writer; @Override public void makeTitle(String title) { this.filename = title + ".html.txt"; try { writer = new PrintWriter(new FileWriter(filename)); } catch (IOException e) { e.printStackTrace(); } writer.println("<html><head><title>" + title + "</tile></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 (String str : items) { writer.println("<li>" + str + "</li>"); } writer.println("<ul>"); } @Override public void close() { writer.println("</body></html>"); writer.close(); System.out.println("作成完了:" + filename); } } public class Main { public static void main(String[] args) { Director d1 = new Director(new TextBuilder()); d1.construct(); Director d2 = new Director(new HTMLBuilder()); d2.construct(); } } import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class TextBuilder implements Builder { private String title; private StringBuffer sb = new StringBuffer(); @Override public void makeTitle(String str) { this.title = str; yokosen(); sb.append("『" + str + "』\n"); sb.append("\n"); } @Override public void makeString(String str) { sb.append("■" + str + "\n"); sb.append("\n"); } @Override public void makeItems(String[] items) { for (String str : items) { sb.append(" ・" + str + "\n"); } sb.append("\n"); } @Override public void close() { yokosen(); String filename = title + ".txt.txt"; try { PrintWriter writer = new PrintWriter(new FileWriter(filename)); writer.print(sb.toString()); writer.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("作成完了:" + filename); } private void yokosen() { sb.append("====================================\n"); } }
% find . -name "*.txt" -print0 |xargs -0 cat [] <html><head><title>Greeting</tile></head><body> <h1>Greeting</h1> <p>朝から昼にかけて</p> <ul> <li>おはようございます。</li> <li>こんにちは</li> <ul> <p>夜に</p> <ul> <li>こんばんは</li> <li>おやすみなさい</li> <li>さようなら</li> <ul> </body></html> ==================================== 『Greeting』 ■朝から昼にかけて ・おはようございます。 ・こんにちは ■夜に ・こんばんは ・おやすみなさい ・さようなら ====================================