2013-07-25 84 views
3

考慮: - 需要在同一界面相同的接口,實現差異

Unluck下聚集不同的實現方式:這些實現有一個方法「創造」,但具有不同數量和類型的輸入PARAMS

解決方案....? 除了Object的可變參數還有什麼其他選項?

+1

你可以使用一個[公司](http://en.wikipedia.org/wiki/Abstract_factory_pattern) –

+0

您可以使用像一個生成器模式,這可能是矯枉過正。但真正的問題似乎在你的界面! – Thihara

+0

問題是我在方法簽名中沒有相同數量/類型的參數.... – Roxana

回答

1

假設你只想要一個,你正打算

創建一個實現你正打算在接口的包裝類的接口下創建方法。現在根據一些條件從包裝類調用各種實現。

對於Maintainabilty視角

如果可能避免的條件和調用代碼發送的實現類名。只是從調用代碼調用作爲參數傳遞類的創建方法。(在這裏也需要創建虛擬創建方法與某些對象類參數,它包含了所有它只是代表調用意法所需數量則params的)

0

如果該方法非常靈活,似乎沒什麼意義,試圖強制每個實現類下的參數它通過一個接口。然而,你可以做的是實現一個接口來描述你想傳遞的不同類型的參數。

例如

public abstract create(CreateParamsInterface cpi) {}; 

,然後實現在你的類抽象方法,使用暴露VA CreateParamsInterface爲相關成員。

+0

謝謝你的回答。我不確定我瞭解如何使用接口。比方說,我有一個字符串用於一些調用,而另一個我有Long和BigDecimal。 – Roxana

0

在接口方面提供了需要的條件作爲基礎,其中你可以決定創建要調用哪個版本的參數的方法。根據條件你可以調用相應的create()函數。邏輯與Factory design pattern相同。

0

我看到三個選項:

  1. 可以傳遞參數,當你構建對象,它具有方法create()。所以你只需要將參數添加到實現包含create()的接口的對象的構造函數中。
  2. 修改創建,這樣它會作爲參數調用哪個方法create()對象。這樣你應該有接口create(ObjectWhichWantsCreation x),這個方法將從給定的對象中獲取所有必要的數據。
  3. create(Properties p),其屬性:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html這是很普通的,但你必須確保它們包含所需的數據。
當然

可以修改2和3,使他們有方法create(),只是添加另一種方法setParams(SomeParams...)這首先需要調用。