2013-03-02 47 views
2

我正在閱讀福勒第1章的「重構」。用更動態的東西替換硬編碼類是否很常見?

在第51頁上,您會看到附有價格類別的電影。 第一種方法是:使用繼承來創建多個電影,每個電影都有其獨特的getCharge方法來計算價格。在第38頁上,這種方法被放棄了,因爲它會太靜態 - 改變電影的分類將會非常困難。但是,在第51頁上,繼續會再次使用,這次是價格。價格的三個子類被添加:兒童價格,新發布價格和RegularPrice。在此設計中,通過更改其價格對象更改電影的分類更容易。但是,在這裏添加新的價格類別需要增加一個新的類。

基於具有名稱字段的接口或抽象類,基於類的價格是否更容易?因此,名稱可以是「ChildrensPrice」,您可以定義任何其他您想要的價格類別,而無需編寫新類?

這是一個具有名稱的重構模式,例如:「將硬編碼類更改爲更動態的表示」?

這種方法的優缺點是什麼?

回答

1

價格類別標籤的方法更「動態」,即使在運行時也可輕鬆添加新的價格類別。另一方面,每個價格類別有一個類別的「靜態」方法可以讓您在常用類型系統中表達更多限制。

作爲一個例子,如果有一個只適用於兒童價格的接口,使用靜態方法,您可以在代碼中正確表達約束。通過動態方法,編譯器無法區分兩個價格類別之間的差異。 (在類型系統中表達儘可能多的限制通常是一個好主意。)

這就是關於一般情況的所有我可以說的。哪種方法最好取決於具體的要求。

相關問題