2010-03-19 68 views
7

我知道這可能看起來是一個有爭議的問題,但實際上並不是這樣。 在接口中是否有最佳數量的方法。接口中的方法數

例如,我個人討厭20個方法的接口。這很難實現。合同似乎很難維持。 類似地,如果方法的數量僅爲1.它讓我懷疑它是否真的是一個很好的抽象。

有什麼想法?

+4

這應該是社會的維基BTW ... – Ascalonian 2010-03-19 16:10:38

+3

「同樣的,如果方法的號碼就是1。這讓我懷疑它是否真的是一個很好的抽象。」 < - 爲什麼?有很多接口只用一種方法就可以使用很多。想到可比和可迭代 - 這些絕對是非常有用的。 – sepp2k 2010-03-19 16:13:06

回答

15

一個接口應該有它所需的儘可能多的方法。實例:

java.lang.Iterable - 1方法
java.lang.Comparable - 1方法
java.util.Collection - 14方法
java.util.List - 25種方法(包括那些自Collection)

因此,答案是 - 不採取數作爲您的界面的標準。相反,將方法放在邏輯上屬於的接口中。

+1

java.lang.Runnable - 1方法:) – 2010-03-19 16:26:45

+2

java.io.Serializable - 0方法:) – pgmura 2010-03-19 17:03:27

+0

'Serializable'是一個完全不同的故事;)('Cloneable'甚至是另一個不同的故事) – Bozho 2010-03-19 17:30:44

5

有一個well-known study,這表明我們一次可以處理的信息項數是七,加或減二。我經常發現,對於這種類型的問題,這是一個很好的經驗法則 - 在這種情況下,如果接口設計爲管理單個相關的一組功能,那麼我們可能無法將功能理解爲單個如果它遠遠超過七個,則設置它。

但是,對於許多界面來說,開發人員不需要能夠將功能理解爲單個相關集合,在這種情況下,此規則將不相關。

0

當您只需要實現一些方法時,處理多種方法的方法是提供默認實現的Abstract類或throw NotImplementedException。如果只有一種方法,那麼它可能是正確的,因爲有些方法只能預期一個Iterface並調用該方法。有很多模式,例如Vistor只需要一種方法。

4

一個方法的接口通常有其目的,你可以更容易地匿名實現它們。我的經驗法則是許多方法,因爲它需要有。但是,一個界面中的很多方法通常會建議您將其分割爲多個其他界面,尤其是當它影響不同的任務區域時(例如,UserLoginAndAdministrationInterface成爲一個UserLogin和一個UserAdministration界面)。您可以在課堂上實現儘可能多的接口,並且也可以將其分類。所以分裂他們根本沒有傷害。

4

一個接口應該有和它需要的完全一樣多的方法

如果這個數字很大,理由應仔細看,但可能是有效的。

另一方面,Java中至少有一個實例,其中接口不需要任何方法(可序列化),因此沒有。更少的方法,絕對使得它更容易實現接口,但仍然可以提供非常有用的抽象。有一種方法有很多接口。

4

我會更關心的是,接口在邏輯上是一致的,而不是有一些任意的最佳數量的方法。也就是說,大量的方法可能表示一個「上帝」對象,應該重構。更清楚的表明方法不具有凝聚力,但方法的數量可能更容易觀察並引導您仔細檢查。但是,有時候,您只需要有很多方法,因爲您希望在該類型的對象上執行許多可能的操作。一個例子就是.NET中的IEnumerable<T>。我想不出有什麼合理的理由將它們分解成單獨的界面,但界面中有很多方法。

3

的接口中的方法沒有最佳數目。接口用於各種不同的事情,什麼是適當的完全取決於什麼。

一個極端是,接口可能是自動代碼生成一個程序由另一程序用於消費,重者可有很好的理由在其1000點的方法。

對於人類可讀的代碼,規則不能代替判斷。

0

這20個方法要麼捕獲一些有用的東西或不。如果他們這樣做,那麼你需要實現所有這些爲他們捕獲的東西提供一個實現。在這種情況下將它們放置在相同的界面中將是一致的。

-1

答案是 - 不要將該數字作爲界面的標準。相反,把方法放在邏輯上屬於他們的接口中,並且你可以在不同的類中使用它 你可以在兩個或更多的類中使用一種接口方法,所以不要猶豫,使用接口它的一個好的編程技術。

+1

你爲什麼複製粘貼我的答案?希望獲得聲譽?這不是這樣。 – Bozho 2010-03-19 19:17:24

+0

對不起親愛的,但我想給我的答案。 – Sanjeev 2010-03-23 12:41:17

1

沒有正確或錯誤的答案多少方法是可以接受的接口有。有些人可能有零,其他人可能很少會超過一百。我寫過的最大的界面有近三十種方法,但它是客戶的一個門面。

不過我認爲這已經超過8-10說的方法將是一個可能的代碼煙的接口 - 只是一些將保證5秒調查。