2012-03-06 124 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