在Python中,“Builder”设计模式是否过时了?

时间:2016-11-30 15:21:23

标签: python design-patterns builder

我正在阅读this article on design patterns in Scala,他们提出了这样的论点,即Builder模式与Java相关,因为它允许代码如下:

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类似,因为您可以在任何调用中命名关键字参数,或者是否有一些合理的应用程序用于此设计模式?

2 个答案:

答案 0 :(得分:2)

权威答案可以在 Effective Java 一书中找到。 第2章是Josh Bloch着名的Java Builder模式的起源。 在第15页,它说明,

  

构建器模式模拟Ada和Python中的命名可选参数

所以你问题的答案是强调。无需模拟本地存在于某种语言中的模式。

您可能也对这个热门话题感兴趣:Does functional programming replace GoF design patterns?

答案 1 :(得分:1)

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