2012-03-06 222 views
1

我對我的JAVA程序的設計方面有一些麻煩,有幾種方法可以讓我想到做,但我不知道哪種方式最好,或者如果有更好的方法如何做到這一點?下面的方法之一Java設計混淆

      <<ABSTRACT>> 
          Rooms class 

     extends    extends   extends 
    Room TYPE U   Connector X  Connector U 


      AGGREGATE walls - into each room type 

爲什麼我變得有點混亂的原因是3種不同類型的房間,我只用在那裏的屬性值不同(高度,寬度等)爲例,但都具有相同的屬性。這是否有必要爲每個房間類型創建一個新班級?

或者我應該採取另一種方式,讓每個房間類別擁有一個房間類別,併爲其實例化三次,並且只需通過setter和getters改變其屬性?

因爲我將不得不設置每個房間的屬性和聚合的牆壁屬性,可能會變得很長!

任何幫助,非常感謝。

+1

不確定是否可以用給出的信息以有意義的方式回答。如果它們大小不同,那完全取決於你想如何識別/使用它們。這聽起來像你應該有一個需要維度而不是實例化 - 然後設置的ctor。 – 2012-03-06 19:32:14

+0

如果你想要一個很好的答案,你真的需要用更多的細節來解釋你的問題。現在你的問題幾乎不可能理解。你應該首先定義問題:「考慮一個有很多房間的房子,每個房間都有不同的尺寸和不同數量的牆壁......我想出了以下設計和......」。我希望這是有道理的 – CKing 2012-09-01 07:29:38

回答

2

如果房間只有屬性值不同,請考慮使用factory樣式。這裏有一個簡單的例子:

class Room { 

    // room properties 
    int x, y, z; 

    // constructor taking properties 
    public Room (int x, int y, int z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 

    // factory methods 
    public static Room createRoomType1() { 
     return new Room(100, 200, 300); 
    } 

    public static Room createRoomType2() { 
     return new Room(400, 500, 600); 
    } 

} 

工廠方法就像不同類型的房間的「預設」構造函數。這在重複/財產設置和班級太多之間取得平衡。

+0

是的嗯,那麼當我實例化牆壁數組列表中的一個房間的4個牆壁時,對牆壁類的說法如何。每個牆壁可能是不同的大小?你可以有工廠方法嗎?像createroomType1牆,然後在該方法內實例化房間的四面牆? – user969729 2012-03-06 19:42:44

+0

無論所有房間的共同點是什麼,例如Wall的實例化,都放到了Room的構造函數中。 – paislee 2012-03-06 19:46:19