java—有多少类太多?何时适合添加新类?

java—有多少类太多?何时适合添加新类?,java,oop,user-interface,Java,Oop,User Interface,这是一个一般性的问题,但我会先告诉你我的具体问题: 目前,我正在为我的程序编写一个GUI,该程序将采用框架的形式,并在框架上放置各种小部件(标签、文本字段等)。它最初将使用javax.swing库,但我在库和GUI本身之间花费了一层抽象,以使创建一个做同样事情的web应用程序变得更容易 我希望有一个类代表GUI的布局:也就是说,它应该包含关于各种标签、按钮等在内容窗格中放置位置的所有信息。目前,我正在考虑的实施方案如下: class Layout { public MyLabel title

这是一个一般性的问题,但我会先告诉你我的具体问题:

目前,我正在为我的程序编写一个GUI,该程序将采用框架的形式,并在框架上放置各种小部件(标签、文本字段等)。它最初将使用
javax.swing
库,但我在库和GUI本身之间花费了一层抽象,以使创建一个做同样事情的web应用程序变得更容易

我希望有一个类代表GUI的布局:也就是说,它应该包含关于各种标签、按钮等在内容窗格中放置位置的所有信息。目前,我正在考虑的实施方案如下:

class Layout
{
  public MyLabel titleLabel;
  public myTextField sequenceTextField;
  [...]

  public void drawTitleLabel()
  {
    titleLabel = new MyLabel("This is the title.");
    titleLabel.setLocation(wherever);
    titleLabel.draw();
  }

  public void drawSequenceTextField()
  {
    sequenceTextField = new MyTextField();
    [...]
    sequenceTextField.draw();
  }

  [...]

  public void drawGuiFrame()
  {
    drawTitleLabel();
    drawSequenceTextField();
    [...]
  }
}
因此,我将内容窗格上的每个小部件声明为类
Layout
的一个字段,然后创建绘制每个小部件的方法
drawWidgetName
。最后,我创建了一个方法,调用每个
draw…
方法来绘制整个GUI

但这似乎是错误的。
draw…
方法感觉它们应该是单个小部件本身的方法,而不是整个GUI的大规模布局的方法。这表明我应该创建单独的类
TitleLabel
SequenceTextField
等,每个类都有一个
draw
方法,然后在
Layout
类中有一个
drawGuiFrame
方法调用所有这些
draw
方法(我甚至可以创建一个抽象类,这些新类可以扩展)

这还有其他一些直接的好处。假设我想合并一个复选框系统以及我的标签和文本区域。然后我可以将其声明为自己的类,并为其提供属性
isoption a
isoption b
等,以记录选中的复选框

但是我有点不愿意以这种方式实现GUI,原因有两个。首先,创建这么多的新类会让大量的
.java
小文件扰乱代码库。其次,这些类将是非常“一次性”的类:我再也不会使用代码了,因为这些类完全是为这个特定的G设计的用户界面


那么-有多少类太多了?创建大量只会使用一次的新类可以吗?因为您觉得它们应该是类?正如我所说的,虽然我欢迎针对这个特定问题的建议,但我也在寻找更多关于何时适合添加新类的通用指针。

类对我来说似乎是正确的方法。你将类组织在包、模块和子模块中,这样它们就不应该“扰乱代码库”。java中的大型应用程序可以轻松地拥有大量的类,这些类可能仅由单个应用程序使用。这几乎就是java作为一种语言和java生态系统作为一个整体的工作方式


在java中,人们通常认为类布局越精细越好。

我自己喜欢为每个新引入的概念创建一个类。通常一个类可以任意长,特别是如果在其中使用大量硬编码数据。你必须小心上帝对象


如果某个类中有太多的逻辑,那么阅读起来就会困难得多。如果你觉得某个类变得太大,那么看看该类中是否有逻辑可以拥有自己的类。

如果你想要更少的类,请尝试另一种语言。这在Java中似乎是正确的方法。没有一种正确的方法,但有很多错误的方法。目前,不要为此焦虑——当你获得经验时,你会获得一种“感觉”对于这个问题。我想说超过10000个类是很多的。这比整个JDK都要多。请记住,通常你会想使用一个带有几个子类的公共超类,其中大多数逻辑都在超类中,只有子类中必然不同的东西。谢谢你的回答。嵌套这个类合适吗如果只使用了一次,那么就可以在一个更大的类中使用e类,或者这会使类太大吗?@Docky_2009取决于此。在某些用例中,这是合适的。