2016-11-30 61 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來完成,並且使用構建器模式並不是嚴格要求具有該行爲。命名參數的工作方式更好,可讀性更強,通常會產生更清晰的解決方案。