设计模式 - 在构建器和抽象工厂之间进行选择

时间:2013-10-27 17:36:30

标签: design-patterns factory abstract builder

阅读GoF,在我看来,抽象工厂和构建器之间的唯一区别是后者有一个额外的抽象层来隐藏客户端的实现。但应该有更多的东西,对吗?如果我们处理图表,构建器应该更有用,但为什么!?

我刚刚介绍这些东西,所以如果有人可以请给我一些建筑师与抽象工厂的例子"情况会非常感激。

1 个答案:

答案 0 :(得分:2)

您可以将Builder视为一种构造函数,而不是将所有输入参数同时提供给构造函数,您可以延迟提供所有参数,直到稍后。这对于随着时间的推移构建对象或将Builder实例传递给其他对象或方法非常有用,这样它们就可以添加它们的参数等。一旦添加了所有参数,调用构建器的build()方法将只创建一个实例构建的对象。再次调用build()将创建另一个相同的实例或根据构建器实现抛出错误。

在Java中,StringBuilder是一个常见的Builder示例。 StringBuilders a允许您随着时间的推移追加/插入/删除字符或其他字符串。然后,当您完成构建String时,调用StringBuilder.toString()将只创建一个新的String对象。这比将多个Stings连接在一起要高效得多,每个Java String连接都会创建一个新的String实例。

AbstractFactory模式用于创建不同的Factory类,其中每个工厂实例可以创建多种不同类型的对象。 Java中的AbstractFactory示例是JDBC类。 JDBC DriverManager类是一个抽象工厂,它创建与数据库连接的不同Connection实例。返回哪个Connection实例取决于您使用的数据库以及您注册的驱动程序。 Connection类是Factory,可让您根据提供的参数值创建不同类型的Statement对象。

Statement statement = myConnection.createStatement(sqlString);

Statement otherStatement = myConnection.createStatement(differentSqlString);