2013-07-28 88 views
2

從設計角度來看,什麼時候最好刪除方法參數,而是使用構造函數參數,而方法可以使用已經初始化爲構造函數參數的類變量?構造函數參數或方法參數?

+1

向我們展示一個具體的例子,你問自己這樣一個問題。使用構造函數參數來初始化對象的狀態。使用方法參數將輸入傳遞給對象的特定方法。 –

+0

這是一個通用設計問題。這意味着有點含糊,但我提供了適當的詳細程度。你不應該有代碼才能給出一個好的答案。設計發生在你編碼之前。 – programm3r

+0

我們(好吧,我)需要一個具體的例子來弄清楚你在問什麼。只是給出一個解釋的問題包括語言障礙和人與你不在同一波長,這兩者都與[so]非常相關。 – Dukeling

回答

4
  • 當不能使用這些參數完全初始化類的對象時,使用構造函數參數。例如:如果您正在創建Employee類,並且您希望Employee的每個實例都必須有名稱,那麼您應該在構造函數中使用name作爲參數。另一個例子是,你不能創建File類,而沒有指定要打開的文件的名稱。

  • 僅在方法上下文中相關的參數應作爲方法參數傳遞。例如,可以在向類List添加新項目時使用。這可能會在內部更新對象的狀態,但是這就是這個類的工作原理 - 它有內部數據結構來維護列表,方法是用來操縱這些狀態的。

  • 有時底層框架可能希望您使用setter方法初始化狀態。當使用像Hibernate這樣的ORM或者在MVC框架(例如Spring MVC)中使用Web表單中的Model對象等POJO Bean時,通常會出現這種情況。在這些情況下,這些類通常代表Value Object,並且一般不會將構造函數中的參數作爲框架使用默認無參數構造器實例化對象。可以使用構造函數或使用setter方法注入依賴項。在這種情況下,您應該針對強制性依賴關係使用構造器參數,並使用setter作爲可選依賴項 - 儘管沒有必要這樣做。你可以把它當作指導。