2017-06-22 47 views
0

說我有3類是這樣的:構建超類

|Abstract Class: Building| 
    |int windows;   | 
    |int rooms;    | 
      | 
      | 
    |Abstract Class: House extends Building| 
    |int familyMembers;     | 
      | 
    |Class: MobileHome extends House| 
    |int wheels;     | 

現在我試圖找出構建我的計劃的最好方式,因爲窗戶和房間明顯的數量將取決於House子類但是所有的建築物都有窗戶(至少爲了這個程序他們會這樣做)。所以這就是爲什麼他們在建築類,但這些窗口的數量將取決於最低的子類,因爲如果我做另一類名爲豪宅延伸House明顯一個豪宅將有更多的窗口比移動房屋。最後,我打算讓我的建築類和其他抽象類非常詳細,最後有大約一百個不同的屬性(我列出的字段只是示例),所以我想知道是否有人有任何想法一個乾淨的方式來構造一個MobileHome對象可能只是向構造函數調用傳遞一個對象,而不是構造函數需要數百個參數。

我在網上找到的所有例子都比較簡單,通常只擴展一個類,只使用幾個字段,因此使構造函數相對容易,所以我只是尋找一個優雅的大型解決方案。

附註:如果任何人有更好的方式來構建這些類的任何想法,也許通過分解更多我會很感激任何意見。

+0

我不確定你究竟是在做什麼,或者你的'MobileHome'類實際需要看起來像什麼,但聽起來你可能想要使用默認值。說,根據你的要求,抽象的「建築物」至少有一扇門和一個房間。所以你可以初始化爲'1'。另外,如果需要,您可以提供setter方法來更改這些方法。如果你有一個'TwoRoomHouse',你可以默認將它們初始化爲'2'。 – domsson

+2

哦,我忘了:如果你真的想到一個需要數百個字段(成員變量)的類,並因此在其構造函數中有數百個參數,那麼在該類的設計中看起來根本是錯誤的。 – domsson

+1

你有很多參數的例子嗎?我認爲,如果將來有一些複雜性,您真正需要的是更加靈活:https://codingdelight.com/2014/01/16/favor-composition-over-inheritance-part-1/。 – Dherik

回答

0

與你超級類的想法是儘可能創建最通用的類​​與所有子類通用的字段和方法。因此,儘可能多地在父類中放入「數百個」參數。

如果你有很多參數,如果你可以將它們分組到類中,然後將這些類的對象作爲你的成員,那麼可能值得研究。例如在移動房屋中,而不是使用描述每個細節的字段來將細節分組在一起。基本上,如果你在一個類中有幾百個字段,那麼你的設計就有了一些東西,所有這些字段都必須有公共的子組。