Python中的“Builder”设计模式是否过时了?
我正在通读,他们提出了一个论点,即构建器模式在Java中是相关的,因为它允许以下代码:Python中的“Builder”设计模式是否过时了?,python,design-patterns,builder,Python,Design Patterns,Builder,我正在通读,他们提出了一个论点,即构建器模式在Java中是相关的,因为它允许以下代码: CarBuilder carBuilder = new CarBuilder() carBuilder.setSeats(2) carBuilder.setSportsCar(true) carBuilder.setTripComputer(true) carBuilder.setGPS(false) Car car = carBuilder.build() 与更容易混淆的形式相比: Car car = n
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来说,这是一种类似的情况,因为您可以在任何调用中命名关键字参数,还是这种设计模式有一些合理的应用程序 作为一名Scala程序员,我认为情况就是这样。我实现了一个API,其中Java代码使用“构建器”,而Scala代码只是普通的Scala代码。我相信在Python中也可以做到这一点,没有任何阻碍,并且使用构建器模式并不是严格要求的行为。命名参数的工作方式更好,可读性更高,通常会产生更干净的解决方案。一本权威的答案可以在高效Java一书中找到。 第2章是Josh Bloch著名的Java Builder模式的起源。 在第15页,它说 生成器模式模拟Ada和Python中的命名可选参数 所以你的问题的答案是肯定的。不需要模拟语言中固有的模式
您可能还对这个流行的线程感兴趣:您可以在
build()
ing之前传递一个构建器,在不同的时间和位置执行初始化的不同方面。此外,如何创建一个对象可能涉及到复杂的逻辑,甚至是哪一个Fluent的api通常只能通过构建器模式实现。