阅读 GoF,在我看来,抽象工厂和构建器之间的唯一区别是后者有一个额外的抽象层来隐藏客户端的实现。但应该还有更多,对吧?如果我们正在处理图表,构建器应该会更有用,但为什么呢!?
我刚刚开始研究这些东西,所以如果有人可以给我一些“建设者与抽象工厂”情况的例子,我将不胜感激。
阅读 GoF,在我看来,抽象工厂和构建器之间的唯一区别是后者有一个额外的抽象层来隐藏客户端的实现。但应该还有更多,对吧?如果我们正在处理图表,构建器应该会更有用,但为什么呢!?
我刚刚开始研究这些东西,所以如果有人可以给我一些“建设者与抽象工厂”情况的例子,我将不胜感激。
您可以将 aBuilder
视为一种构造函数,而不是将所有输入参数同时提供给构造函数,您可以延迟提供所有参数直到稍后。这对于随着时间的推移构建对象或将 Builder 实例传递给其他对象或方法非常有用,以便他们可以添加参数等。一旦添加了所有参数,调用 builder 的build()
方法将创建一个已构建对象的实例。再次调用build()
将创建另一个相同的实例或抛出错误,具体取决于构建器实现。
在 Java 中,aStringBuilder
是一个常见的 Builder 示例。StringBuilders 允许您随时间追加/插入/删除字符或其他字符串。然后,当您完成构建字符串时,调用StringBuilder.toString()
将只创建一个新的字符串对象。这比将多个 Sting 连接在一起要高效得多,其中每个 Java String 连接都将创建一个新的 String 实例。
该AbstractFactory
模式用于创建不同的Factory
类,其中每个工厂实例可以创建几种不同类型的对象。Java 中的一个示例 AbstractFactory 是 JDBC 类。JDBCDriverManager
类是一个抽象工厂,它创建Connection
连接到数据库的不同实例。返回哪个Connection
实例取决于您使用的数据库以及您注册的驱动程序。该类允许您根据给它的参数值创建不同类型的Connection
对象。 Factory
Statement
Statement statement = myConnection.createStatement(sqlString);
Statement otherStatement = myConnection.createStatement(differentSqlString);