小帮手的OOP设计类

OOP design of little helper classes

假设我有一个 class C 正在做一些工作。

为此,我需要一个非常简单的助手 class H(例如,一对或三元组的表示)。 H只在C中需要

我会把 H 放在 C 里面。

class C
{
   void foo ()
   {
     // ... use H to do the job more easy ...
   }

   class H
   {
      // very simple and contained stuff
   }
}

将 H 放在 C 中是个好主意吗?我这样做是为了将它包含在我认为应该存在的地方,而不是其他任何地方。但我不确定这是不是好的设计。

这是一个非常好的设计。 classes、变量或方法的可见性应始终限制在唯一需要的范围内,绝不能超过。
如果以后这个 class 需要在内部 class 之外使用,只需将它移到其他地方即可。

是的,这是很好的设计。您尝试做的是 inner class。您也可以将其设为私有。如果它不需要独占访问外部 class 的成员,将其设为静态嵌套 class ,它将需要更少的内存。

更多附录:

首先:如果假设 H 对象在没有拥有 C 实例的情况下存在,那么 H 应该是 static。您甚至可能想将其设为私有。

然后,记住:这里有一个内在的class,所以H的全名实际上是whatever.package.com.C.H。换句话说:你真的把 H 和 C 联系在一起了。

如果你在某个时候决定 H 有足够多的其他方面值得成为 "its own" 事情怎么办?然后你可能需要修改一些代码,把你的 whatever.package.com.C.H 变成 whatever.package.com.H.

因此您可以考虑将 H 设为顶层 class,但将其设为 public .所以你把它放在 C.java 中,而不是放在 class!

( 但当然,这真的取决于 "style",我认为 Google java 编码标准告诉你只有 一个 顶级 class 每个 .java 文件)

最后的话:如果有办法把你的 H class 变成 可以 在其他地方使用的东西,那么我会马上前进使其成为自己的 public class。如果 re-using 看起来合理,请编写您的代码,以便轻松 re-used!一个 3 值元组听起来不像是特定于任何东西的,所以它听起来像是 re-use.

的候选者