2017-05-08 61 views
0

在C#,類B用作唯一基類三類CDE的。代碼重構:2但不是所有基類的派生類具有相同的覆蓋方法

B具有virtual方法,其在CDE覆蓋。 CD具有相同的執行重寫方法的,從所述一個在E不同。

CD沒有其他的共同的東西。

如何刪除CD之間的代碼重複?我正在考慮

的兩種方法:

  1. 創建B派生新類FCF而不是B衍生D。將公共覆蓋方法移至CDF。我認爲這是過度殺傷,因爲CD沒有其他共同點。

  2. 創建B的新方法,從虛擬方法不同的名稱,並在CD相同實施共同覆蓋的方法。然後改變的共同覆蓋方法的實現在CD,只是一個調用新的方法B。這是一個優雅的解決方案?它是一些設計模式還是面向對象的技巧?

謝謝。

我不加C#的標籤,因爲我覺得這個問題是不是C#具體,但一般所有的面向對象的語言。

回答

1

使用Strategy design pattern .The想法是寧願在組成繼承因爲繼承可能導致深層次結構和通常的代碼重用的錯誤的方式。

Java代碼:

class B {} 

class C extends B { 
    Behaviour1 b1; 
} 

class D extends B { 
    Behaviour1 b1; 
} 

class E extends B { 
    Behaviour2 b2; 
} 

class Behaviour1 extends Behavior {} 

class Behaviour2 extends Behavior {} 

您仍然可以使用多態行爲繼承。

相關問題