2012-01-20 249 views
-1

我正在處理一個並行繼承層次結構,我對一步一步重構有一個想法,並希望看到它是否可行,或者是否有更好的方法來實現它。並行繼承層次結構重構

  1. 創建實現所需的如CarHandler兒童vwHandlerfordHandler具體行爲的孩子Handler類,bmwHandler

  2. 添加調用所有組件和重組它讓孩子返回的對象neccessary 。例如呼叫vwHandler.getDrive將返回vwDrive.drive結果,稱vwHandler.getSeat回報vwSeat.seat

  3. 重構的其他類,讓他們提供一般的功能,而不是具體的如呼叫vwHandler.getDrive將返回處理器

    drive(vwSpec1, vwSpec2)

public abstract class CarHandler 
{ 
    private Car car; 

    public Car getCar() 
    { 
     return car; 
    } 
    public Car setCar() 
    { 
     car = car; 
    } 

    public CarHandler(Car car) 
    { 
     this.car = car; 
    } 

    public Car getCar() 
    { 
     return car; 
    } 

    public void setCar(Car car) 
    { 
     this.car = car; 
    } 

    public void updateCar() 
    { 
     Globalizer.updateOnServer(car); 
    } 

    public abstract Drive getNewDrive(); 
    public abstract Seat getNewSeat();  
} 
+0

您能否給我們提供一個例子? – Grooveek

+0

@Grooveek添加了處理程序的例子 – FooBar

+0

甚至在此之前,不同類型的處理程序有不同的行爲嗎?你確定你不能將它降低到一個標誌(一個具有品牌價值的枚舉的成員)嗎? – Viruzzo

回答

0

實際上,這種方法對我來說工作得非常好,我已經實施了前兩個步驟,最終取消了幾百行重複以及未來如何進一步重構。我會強烈推薦這種方法。

0

我真的不明白你的問題,我沒有看到你的榜樣的關係並行的繼承層次,但我不喜歡受歡迎的受保護的現場車。

有關更多信息,請參閱我的回答here。接受的答案是如何在基類中封裝行爲的一個很好的例子。

+0

是的,我知道這是不好的形式,我會將它轉換爲正常的存取器和增變器,謝謝擡起頭來。 – FooBar

+0

這應該是一個評論而不是答案。如果您有多個對象,如vwDrive,vwSeat,vwEtc,這表示並行層次結構可以在多個位置實現對象特定的行爲,理想情況下,這些行爲應該集中到一個特定的類以及中央特定類可以用不同的參數調用的其他常規工具集。 – FooBar

+0

vwSeat和bmwSeat是否需要具有不同的行爲,即不同的類型?或者他們可能只有不同的字段值?順便說一句。我沒有足夠的聲望留下評論。 – DanT