标签:tin make void exce api ace com 参数 相同
一、模式说明
在现实世界中,当我们要构造一个大型工程时(建一个大楼),通常的做法是先建造工程的每个独立部分,然后再逐步构造完成(先打地基,再搭框架,最后逐层累造)。在程序设计领域,构造一个复杂的类时(或一些具有类似结构的复杂类时),也可以采用类似的思想:如果要创建一个用于构造文档的类(或者是word,或者是html),虽然具体的文档有不同的结构,但是构造这些对象有相同的套路:创建标题,创建内容,创建条目,结束文档。Builder建造者模式就是用来构造复杂的类的。
二、模式类图
三、模式时序图
四、模式中的角色
五、代码示例
1、Builder建造者类:
package com.designpattern.cn.builderpattern; public abstract class Builder { public abstract void makeTitle(String title); public abstract void makeString(String string); public abstract void makeItems(String[] items); public abstract void close(); }
抽象类,它定义了生成实例的接口。
2、Director监工:
package com.designpattern.cn.builderpattern; public class Director { public Builder builder; public Director(Builder builder){ this.builder = builder; } public void construct(){ builder.makeTitle("Greeting"); builder.makeString("A.M. to P.M."); builder.makeItems(new String[]{ "Good morning", "Good afternoon" }); builder.makeString("Night"); builder.makeItems(new String[]{ "Good night", "Bye" }); builder.close(); } }
注意Director的构造函数,它有一个Builder类型参数,但实际上并不能直接传递Builder实例(Builder是抽象类,无法构造实例),而是传递一个Builder的子类(TextBuilder或者是HtmlBuilder)
3、接下来是Builder的两个子类,它是实例类,可以创建对象。
package com.designpattern.cn.builderpattern; public class TextBuilder extends Builder { private StringBuffer buffer = new StringBuffer(); public void makeTitle(String title){ buffer.append("=================="); buffer.append("[" + title +"]"); buffer.append("\n"); } public void makeString(String str){ buffer.append("[" + str + "\n"); buffer.append("\n"); } public void makeItems(String[] items){ for (String item: items ) { buffer.append(" ." + item + "\n"); } buffer.append("\n"); } public void close(){ buffer.append("=================="); } public String getResult(){ return buffer.toString(); } }
package com.designpattern.cn.builderpattern; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class HtmlBuilder extends Builder { private String filename; private PrintWriter writer; 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>"); } public void makeString(String str){ writer.println("<p>" + str + "</p>"); } public void makeItems(String[] items){ writer.println("<ul>"); for (String s : items ) { writer.println("<li>" + s + "</li>"); } writer.println("</ul>"); } public void close(){ writer.println("</body></html>"); writer.close(); } public String getResult(){ return filename; } }
4、运行结果:
给程序传递参数:
运行结果:
传递html时的运行结果:
html显示效果:
六、相关的设计模式
七、拓展思路
标签:tin make void exce api ace com 参数 相同
原文地址:https://www.cnblogs.com/zheng-hong-bo/p/11100397.html