2010-05-28 136 views

回答

1

不,實際上這是很好的做法。或者你認爲你的三個調用方法應該複製被調用的代碼嗎?

1

方法只是功能和功能是代碼重用和設計改進有用的抽象。如果一個類的三個方法需要在運行時做同樣的事情,他們應該複製粘貼代碼或調用一個單獨的方法?

具有分成通過其他方法被調用方法的代碼一些有意義的部分是代碼重用這是很好的,除非你真的很過分的又一個例子。

0

根本不是。事實恰恰相反。方法可以完成特定的任務,您應該使用它們來完成這些任務。

3

完全沒有,如果你正確地設計了你的課程,這是預料之中的。你應該有一個小的公共接口,如果實現很複雜,你最終可能會在同一個類中調用很多私有方法。

事實上,這樣做可能是反模式。如果你不斷地調用另一個類的方法,這就叫做Feature Envy,你應該把類組合起來。如果你把所有的實現都放到一個龐大的函數中,那只是不可維護的,而且可能包含很多代碼重複。

將事情分解成其他可重用的方法是件好事。你調用同一個方法的3種方法的情況是完美的代碼重用。如果該函數的代碼在每個調用函數中都重複,那將會非常糟糕。

0

是的,如果這些方法是可重寫的,即,如果類和/或方法的任何最終。原因是試圖覆蓋行爲或提供服務層的子類不能可靠地實現,因爲可以多次輸入圖層。 例(斯卡拉僞代碼),在這裏我們假設HashSet.addAll調用自己的HashSet.add

class MemCountingSet[T] extends HashSet[T] { 
    private def sizeOf(t: T) = ... 

    private var memCount = 0 

    def add(t: T) = { 
    memCount += sizeOf(t) 
    super.add(t) 
    } 
    def addAll(coll: Collection[T]) = { 
    memCount += coll.foreach(sizeOf) 
    super.addAll(coll) 
    } 
} 

當使用addAll我們現在結束了重複計算。

相關問題