需求:需要组装复杂结构的实例
代码清单:
Builder 接口:
1 public abstract class Builder { 2 3 public abstract void makeTitle(String title); 4 public abstract void makeString(String str); 5 public abstract void makeItems(String[] itens); 6 public abstract void close(); 7 }
实现1:
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[] itens) { writer.println("ul"); for(int i=0;i<itens.length;i++){ writer.println("li"+itens[i]+"</li>"); } writer.println("</ul>"); } @Override public void close() { writer.println("</body></html>"); writer.close(); } public String getResult(){ return filename; } }
实现2:
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+"|"); buffer.append("\n"); } @Override public void makeItems(String[] itens) { for(int i=0;i<itens.length;i++){ buffer.append("."+itens[i]+".\n"); } buffer.append("\n"); } @Override public void close() { buffer.append("============================\n"); } public String getResult(){ return buffer.toString(); } }
指挥者:
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[]{ "good morning", "good night" }); builder.makeString("晚上"); builder.makeItems(new String[]{ "good night", "bye" }); builder.close(); } }
测试:
public class Main { public static void main(String[] args){ TextBuilder textBuilder = new TextBuilder(); Director director = new Director(textBuilder); director.construct(); String result = textBuilder.getResult(); System.out.println(result); HtmlBuilder htmlBuilder = new HtmlBuilder(); Director director2 = new Director(htmlBuilder); director2.construct(); String fileName = htmlBuilder.getResult(); System.out.println(fileName+"complete"); System.exit(0); } }