我已经多次看到这个问题出现在这里和那里,但我从未找到并回答我满意的答案。
来自维基百科:
Builder专注于一步一步地构建一个复杂的对象。抽象工厂强调一系列产品对象(简单或复杂)。Builder 作为最后一步返回产品,但就抽象工厂而言,产品会立即返回。
但是对于客户来说不是一样的吗?一旦构建完成,他就会获得完整的对象,因此对他来说没有额外的功能。
我认为它的唯一方法是作为一种方式或逐步组织构造函数代码,以强制构建构建器实现的结构。这很好,但与抽象工厂相差甚远。
来自 Wikipedia 的下一点是一个很好的参考,可以说明我的观点:
通常,设计从使用工厂方法(不太复杂、更可定制、子类激增)开始,然后随着设计人员发现需要更多灵活性的地方而向抽象工厂、原型或构建器(更灵活、更复杂)发展。
如果是这样,那么在您的系统中必须引入什么样的复杂性,您将从抽象工厂更改为构建器?
我的观点是,我找不到一个很明显抽象工厂不够用的例子,而你需要一个 Builder。