我曾經要求設計類/接口層次結構來實現用最少的代碼冗餘等級設計層次用最少的代碼編寫
比方說,與有3類,其中每個2共享相同的代碼對於一些方法(即是A類和B類都有方法AB(),B類和C類都有methodBC()等)
有了這樣的背景,我被問到是否最好創建一個抽象類,每個類(A,B,C )擴展或實現接口,或者可能解決它不同?
假設這個問題可以擴展到4個類別(每個類別中有3個具有相同的方法)等等。什麼是最好的解決方案?有沒有一種方法每個方法的代碼只會被寫入一次?
我曾經要求設計類/接口層次結構來實現用最少的代碼冗餘等級設計層次用最少的代碼編寫
比方說,與有3類,其中每個2共享相同的代碼對於一些方法(即是A類和B類都有方法AB(),B類和C類都有methodBC()等)
有了這樣的背景,我被問到是否最好創建一個抽象類,每個類(A,B,C )擴展或實現接口,或者可能解決它不同?
假設這個問題可以擴展到4個類別(每個類別中有3個具有相同的方法)等等。什麼是最好的解決方案?有沒有一種方法每個方法的代碼只會被寫入一次?
如果您要使用抽象類,您有問題(從您的示例中)B必須與A類和B類共享方法。因此,如果您有A類和B類擴展的AB類,那麼您不能讓B再次延長BC級。正如你所說,你可以使用Interfaces來實現,但是你只會共享方法原型而不是實現。例如,C++就是一種允許多重繼承的語言,它引發了其他需要注意的問題(鑽石問題等)。此外,在Java 8中,您將在接口中獲得default methods(實現)。
在你的問題,我認爲我們正在尋找delegation pattern。確保通過其他設計模式 - 策略也有點類似。
在這種情況下,兩個問題需要回答 -
但是一般來說這樣的症狀需要在對象模型級重新檢查。大概我們可能會發現我們違反單一責任原則或'IsA'關係。將來這些補丁可能會陷入困境。
我沒有特別提出這個問題。問題是這些常用方法在名稱方面是相同的。所以每個類都有methodAB(),但是A和B有相同的實現,當C類有不同的(但仍然命名爲methodAB())等等。所有這些類都應該相互「平行」,這意味着在最簡單的情況下,它們都應該是基類的擴展 - 但問題是我們是否真的需要基類或者我們只需要一個還是......? –
是的,設計模式,這可能是他們對我的期望...我會在那裏開始。謝謝! –