【问题标题】:Structuring SuperClasses构造超类
【发布时间】:2017-06-22 23:50:36
【问题描述】:

假设我有 3 个这样的课程:

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

现在我正在尝试找出构建程序的最佳方式,因为显然窗户和房间的数量将取决于House 的子类,但是所有建筑物都有窗户(至少为了这个程序他们是这样)。这就是为什么它们属于建筑类,但这些窗户的数量将取决于最低的子类,因为如果我创建另一个名为 mansion 的类,它扩展了House,显然豪宅将比移动房屋拥有更多的窗户。

最后,我计划制作我的建筑类和其他非常详细的抽象类,最后有大约一百个不同的属性(我列出的字段只是示例)所以我想知道是否有人对构造 MobileHome 对象的简洁方法可能只将一个对象传递给构造函数调用,而不是构造带有数百个参数的构造函数。

我在网上找到的所有示例都比较简单,通常只扩展一个类并且只使用几个字段,所以构造函数相对容易,所以我只是在寻找一个优雅的大规模解决方案。

旁注:如果有人对构建这些类的更好方法有任何想法,也许通过更多地分解它们,我会很感激任何意见。

【问题讨论】:

  • 我不确定你到底在追求什么,或者你的 MobileHome 类实际上需要是什么样子,但听起来你可能想要使用默认值。比如说,抽象Building,根据你的要求,至少有一门一室。所以你可以将两者都初始化为1。此外,如果需要,您可以提供 setter 方法来更改这些设置。如果你有一个TwoRoomHouse,你可以默认将它们初始化为2
  • 哦,我忘了:如果您实际上正在考虑一个需要数百个字段(成员变量)并因此在其构造函数中需要数百个参数的类,那么该类的设计似乎存在根本性错误。
  • 您是否已经有一些带有很多参数的示例?我认为如果您将来会有一些复杂性,您真正需要的是更加灵活:codingdelight.com/2014/01/16/….
  • 有一个使用示例会有所帮助。

标签: java inheritance constructor


【解决方案1】:

超类的想法是使用所有子类共有的字段和方法创建尽可能通用的类。因此,在父类中尽可能多地放置“数百个”参数。

如果您有这么多参数,那么如果您也可以将它们分组到类中,然后将这些类的对象作为您的成员,那么可能值得研究一下。例如,在移动房屋中,您希望将详细信息组合在一起,而不是使用描述每个详细信息的字段。基本上,如果您在一个类中有数百个字段,那么您的设计就会出现问题,那么所有这些字段都必须有共同的子组。

【讨论】:

    【解决方案2】:

    您可能想查看gof 书中的creational design patterns。特别是builder 听起来可能很合适。这应该让您了解如何构建类。您可以在 java here 中找到一些示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多