主題說,它已經:OOP設計:接口的方法與實現相關的參數
我想現在大概如下設計問題:我定義一個接口,它包含各種方法的一個特定類型的對象。 現在我有這個問題,這個接口的不同實現,需要額外的/不同的方法參數(因爲它們的實現方式使得這個必要),我不能將它納入接口,因爲它們不是通用的全部接口-implementations。
現在我意識到接口實現可以帶有自己的屬性文件,從那裏加載它們的附加參數,但是如果這些參數需要在運行時傳遞呢?
目前我只能想到在Map<String, Object> parameters
通過克服這個問題的 - 因爲JDK-類,如DocumentBuilderFactory正在做的通過提供像setAttribute(String attName, Object attValue)
方法本 似乎是一個可行的辦法來解決這個問題非常類似的東西。 不過,我會對其他人如何解決這樣的問題感興趣嗎?
我不想從接口派生並添加其他方法,因爲在我的情況下,我將不得不從基接口的方法拋出NotImplementException
。
UPDATE:地圖的方法的
什麼能最終的問題?如果不能使用其他參數,實現類可以完全忽略它。 其他人可能會檢查Map是否包含所需的參數名稱,檢查其值的類型並在有效時使用它們,如果不是,則拋出異常。 我也看到了這一點正在使用抽象類的JAXBContext,所以它似乎是一個常見的方法..
UPDATE:
我決定去地圖的方法,因爲我沒有看到任何明顯的缺點,它也被用於JDK(是的,我知道這並不意味着太多:) 因爲我不能接受關於這個問題的答案,我只會upvote。感謝您的輸入!
問候,
--qu
這個信息是一種方法需要的東西,或是對象需要執行它的動作的東西?舉一個具體的例子。使用** Map **是一個糟糕的設計決定。 –
2012-02-02 12:55:02
@MaurícioLinhares我意識到這個解決方案遠不是最優的(這就是爲什麼我問這個問題),但以DocumentBuilderFactory爲例 - 接口對於所有可能的DOM解析器是相同的,但不同的DOM解析器實現提供了不同的功能/參數,你永遠不可能全部納入接口,但你需要一種方式來在運行時以某種方式傳遞這些參數 - 我提到了JDK如何解決這個問題... – quaylar 2012-02-02 13:02:31
想一想,這是一個**初始化**過程。工廠唯一的目的是創建一個可以完成工作的新對象,它的**接口**根本不會改變。你想要的是別的東西,你想把它添加到你的**接口方法**中。如果你想要的是真正在初始化過程中設置對象,那麼創建這些對象的構造函數參數就是了。 – 2012-02-02 13:09:51