七、Builder 建造器模式

需求:需要组装复杂结构的实例

代码清单:

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);
    }
}

猜你喜欢

转载自www.cnblogs.com/baizhuang/p/10443349.html