2016-11-30 59 views
0

我正在读通过this article on design patterns in Scala,并且他们提出,该生成器图形是Java相关的,因为它允许代码等作为参数:Python中的`Builder`设计模式已经过时了吗?

CarBuilder carBuilder = new CarBuilder() 
carBuilder.setSeats(2) 
carBuilder.setSportsCar(true) 
carBuilder.setTripComputer(true) 
carBuilder.setGPS(false) 
Car car = carBuilder.build() 

相对于更多的混乱倾向形式:

Car car = new Car(2, true, true, false) 

他们后来说:

在比如Scala语言,它可以让你的名字的参数,同时通过 他们,建造者模式基本上是过时的......

这是为Python类似的情况,因为你能够在任何调用命名关键字参数,或者是有这种设​​计模式的一些合理的应用程序?

+0

您可以通过一个建设者绕前'建立()'ING,其在不同的时间和地点进行初始化的不同方面。另外,如何创建一个对象可能会涉及复杂的逻辑 - 甚至是*哪些*。 '流利'API通常只能通过构建器模式来实现。 – JimmyB

回答

1

一个权威的答案可以在本书有效的Java被发现。 第2章是Josh Bloch着名的Java Builder模式的起源。 第15页,它指出,

Builder模式可模拟命名的可选参数在阿达和Python发现。

所以你的问题的答案是一个强调是的。没有必要模拟一种语言中本地存在的模式。

您还可能有兴趣在这个流行主题:Does functional programming replace GoF design patterns?

1

作为一名Scala程序员,我会说这是事实。我已经实现了一个API,其中Java代码使用“Builder”,而Scala代码只是普通的Scala代码。我相信可以在没有任何障碍的情况下使用Python来完成,并且使用构建器模式并不是严格要求具有该行为。命名参数的工作方式更好,可读性更强,通常会产生更清晰的解决方案。

相关问题