【问题标题】:Alternatives to static members [closed]静态成员的替代品[关闭]
【发布时间】:2014-09-05 18:19:21
【问题描述】:

我想知道什么时候让一个只包含静态方法和变量的类被认为是一种不好的做法,以及有哪些替代方法可以避免这种做法。

我知道,当您需要功能但您不能或不需要对象的实例时,它们对于所有情况都是必需的。不过,我想知道这种情况是否不是不良做法或不良设计决策的结果。

谢谢

【问题讨论】:

  • 另一种选择是enums。你会得到真正的单例 Object 实例。但它们在内存方面并不便宜。
  • 这总是不好的做法,问题的真正根源在于它没有真正的用途。我使用静态字段的唯一两个原因是 1) 用于存储常量(在 .NET 中,由于技术原因,它比使用 const 更好),2) 用于不使用对象实例的私有方法。单例几乎总是由 IoC 容器处理。看看stackoverflow.com/questions/25617276/…

标签: java .net class design-patterns


【解决方案1】:

一种常见的替代方法是使用单例或只有一个实例的实例类。

这是更可取的,因为它更容易测试和注入不同的功能。

如果您的班级没有字段

  • 使用没有实例的枚举类作为实用程序类。
  • 在可能的情况下,将静态方法移动到作为参数之一出现的类中。
  • 如果需要实现接口,请使用无状态单例。

【讨论】:

    【解决方案2】:

    只有最终静态变量的文件没有问题,这只是对常量进行分组的一种方式。

    但是,只有静态方法的典型帮助程序/实用程序类往往会引发糟糕的 OO 设计,或者它们是它的症状。

    一个常见的情况是DateUtil 类,Date 类的设计太糟糕了,您需要使用它的设施。尽管创建自己的 API 很诱人,但最好使用适当的 Date API(如 Yoda Time)或新的 Date API。

    所以,尽量避免这种类,把这些方法放在与之相关的对象附近。

    【讨论】:

      【解决方案3】:

      我发现最好尝试只使用本地 java 包的方式使用静态方法和值。样板代码和纯功能性的东西。 EX:三角函数、解析/转换数据等

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 2011-06-16
        • 2011-12-17
        • 2010-10-21
        相关资源
        最近更新 更多