我正在阅读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类似,因为您可以在任何调用中命名关键字参数,或者是否有一些合理的应用程序用于此设计模式?
答案 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中完成同样的操作,并且使用构建器模式并不是严格要求具有该行为。命名参数工作方式更好,更易读,通常可以提供更清晰的解决方案。