
本文共 3088 字,大约阅读时间需要 10 分钟。
Builder建造者模式的核心是通过引入一个监工类(Director),将构建步骤的管理和组合的责任与具体的Builder类区分开来,从而实现松耦合。下面将详细解释Builder模式及其在实际应用中的实现细节。
Builder模式的工作原理
Builder抽象类:定义一个接口或抽象类,包含若干个方法,每个方法代表一个构建步骤。这些方法的具体实现将由各个Builder子类来实现。
Builder子类:每个Builder子类(如HtmlBuilder、TextBuilder)专注于实现特定类型的文件构建,继承自Builder抽象类,并实现其定义的所有抽象方法。
Director监工类:负责组合Builder子类的各个构建步骤,并调用相应的方法来构造最终的文件。Director类通过调用Builder的方法,形成一个完整的构建流程。
构造过程:
- 初始化:Director使用指定的Builder实例进行初始化。
- 执行构建步骤:调用Builder子类的各个方法,逐步构建文件内容。
- 返回结果:构建完成后,Director可能返回最终的结果或文件。
Builder模式的优点
松耦合:Builder子类只需实现接口中的方法,不需要关心其他Builder子类的具体实现。Director负责组合这些步骤,减少了类之间的依赖关系。
高内聚低耦合:Builder类集中处理构建过程,各自维护自己的状态和资源,避免了在一个类中处理多个相关但不相关的责任。
可扩展性:只需在Builder和Director中添加新的构建步骤和相应的实现类,就可以支持新的文件类型或功能,不需要修改现有代码。
面向接口编程:通过Director调用Builder的方法,其他Builder子类无需知道其他步骤是如何实现的,仅需遵循接口规范即可完成任务。
代码示例
public abstract class Builder { public abstract void makeTitle(String title); public abstract void makeString(String str); public abstract void makeItems(String[] items); public abstract void close();}
- HtmlBuilder实现类:
- " + items[i] + " "); } pw.println("
- Director监工类:
- Main类:
public class HtmlBuilder extends Builder { private String filename; private PrintWriter pw; public void makeTitle(String title) { filename = "D://" + title + ".html"; try { pw = new PrintWriter(new FileWriter(filename)); pw.println("" + title + " " + title + "
"); } catch (IOException e) { e.printStackTrace(); } } public void makeString(String str) { pw.println("" + str + "
"); } public void makeItems(String[] items) { pw.println(""); pw.close(); } public String getResult() { return filename; }}"); for (int i = 0; i < items.length; i++) { pw.println("
public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void construct() { String[] items1 = {"奏国歌", "升国旗"}; String[] items2 = {"观众鼓掌", "有序撤离"}; builder.makeTitle("今日头条"); builder.makeString("毕业典礼"); builder.makeItems(items1); builder.makeString("典礼结束"); builder.makeItems(items2); builder.close(); }}
public class Main { public static void main(String[] args) { String choice = "html"; if (choice == "plain") { TextBuilder t = new TextBuilder(); Director d = new Director(t); d.construct(); System.out.println(t.getResult()); } else if (choice == "html") { HtmlBuilder html = new HtmlBuilder(); Director d = new Director(html); d.construct(); System.out.println(html.getResult()); } else { usage(); } } private static void usage() { System.out.println("使用 'plain',编辑文本文件"); System.out.println("使用 'html',编辑网页文件"); }}
总结
Builder模式通过将构建步骤的管理封装到Director类中,减少了Builder子类之间的耦合。这种设计理念使得系统更加灵活和可扩展,支持新的构建需求时仅需添加新的Builder子类和对应的Director的方法即可。这种设计方式既保持了代码的可维护性,又实现了接口的抽象化,使得系统具有更好的扩展性和可复用性。
发表评论
最新留言
关于作者
