2015-12-25 40 views
0

我有一個抽象類Employee,它實現接口IEmployee並且進一步由抽象類組成,如EmploymentType。我已經使用了Abstract類,以避免子類之間共同功能的代碼重複。將方法從抽象類移動到接口以改進代碼設計

enter image description here

所以我想問以下幾個問題:

  1. 是否從抽象類移動抽象方法,接口將提高設計?

enter image description here

  • 其次,是Interfaces優於Abstract類大項目?我問這個問題的原因是因爲我看到很多企業應用程序的接口使用比抽象類多得多。這給人的印象是使用接口是構建企業應用程序的正確方法。
  • 回答

    1

    基本抽象Employee類中存在哪些常見邏輯?我認爲任何共享邏輯可能都是微不足道的,可能只是在後代中複製(DRY並不總是一定要走)。這樣,你可以擁有一個Employee接口,以及一個或多個直接的具體祖先,在構造函數,getter和setter中有一些重複的代碼。這可能是有爭議的,但我已經看到這種方法反覆優先。

    EmploymentType和WorkLocation可以是枚舉而不是類,以避免任意的String字段。也許WorkTime也可能是一個枚舉;我看不到它在你的UML中的結構。 hourlyPay字段可以封裝在一個枚舉類型中;我不確定你所提供信息的最佳屬性。

    關於接口的一般問題,請參閱Joshua Bloch的第18項有效Java(「更喜歡接口抽象類」)。此外,項目「喜歡組合繼承」。從設計角度來看,接口更簡單,更靈活,並且特別適合可測試性。這是因爲如果你有合作者被聲明爲抽象類的實例,那麼他們可能包含難以測試的邏輯(例如初始化或附加依賴)。被聲明爲接口類型的協作者可以被100%嘲笑。

    +0

    當你說'接口從設計角度來看是靈活的,你在談論它們的實現還是多態?此外,爲什麼我正在考慮將方法從抽象類移動到接口,所以我可以爲我的類創建合同(按合同設計)。並在抽象類中實現這些方法以避免代碼重複。 –

    +1

    嗨米娜,我對接口的靈活性的評論是由於幾個原因:(一)類可以實現一些接口,但只能從一個抽象類繼承,(二)更容易使現有的類實現一個新的接口,並且難以使現有類(可能存在於層次結構中)擴展抽象類。 –