需求:需要组装复杂结构的实例
代码清单:
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(""+title+" "); writer.println(""+title+"
"); } @Override public void makeString(String str) { writer.println(""+str+"
"); } @Override public void makeItems(String[] itens) { writer.println("ul"); for(int i=0;i"); } writer.println(""); } @Override public void close() { writer.println(""); 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
指挥者:
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); }}