使用实用程序类存储对象是一种好习惯吗?

时间:2019-04-18 02:57:26

标签: java class object utility

这主要是一个编码风格的问题。我想知道从实用程序类存储和获取对象是否是一个好的编码原则?

例如,假设我创建了一个整数列表,并且希望该列表供其他类使用。但是,为了做到这一点,每次我想使用/编辑列表时,我都必须在每个类中传递列表。 代替执行此操作,创建一个实用程序类是一种好习惯吗,该实用程序类在每次我要使用它时都会为我“获取”此列表?

使用实用程序类会清理我的代码。但是,我听说甚至使用实用程序类也被认为是不好的做法。谢谢!

public class ThisExample {

    private static final List<Integer> thisList = new ArrayList<Integer>();

    public static List<Integer> getMoveHistory() {
        return thisList;
    }
}

1 个答案:

答案 0 :(得分:2)

我建议您从利弊的角度来看待您的问题,而不是从最佳实践的角度来看待,因为后者是一种见解。

使用全局容器的优点:

  • 易于访问全局变量-导入容器的每个类都将能够访问全局数据。
  • 集中共享变量-假设所有变量都存储在同一容器类中,查找特定的全局变量很容易。
  • 文档-将所有全局变量存储在一个类中有助于记录全局变量的上下文和目的-只需按上下文对它们进行分组并添加注释以说明它们在应用程序中的作用。
  • 简单性-对于较小的代码库/应用程序,使用单线程方法以及少量的类和代码流,使用全局变量容器可以是在实体之间传递信息的简单直接的解决方案。

使用全局容器的缺点:

  • 类耦合-所有将使用全局变量的类都必须导入相同的Container类,这将导致许多其他类依赖于该容器类。现在,对容器类的更改将同时影响许多其他类。

  • 单点故障-许多应用程序代码流将通过抛出容器类。出于性能方面的考虑,这使得在容器类上使用某些方法(例如使用同步锁)不切实际。

  • 调试困难-由于应用程序的许多元素将不可避免地访问全局变量,因此调试它们的内容可能会更加困难,尤其是在多线程解决方案中。

  • 面向对象的反模式-如果OO方法专注于代码的封装和解决方案的抽象,则全局容器与之完全相反-共享代码仅关注实现(当使用DS global变量)。

  • 始终在内存中-只要应用程序运行,全局容器的变量将处于作用域内。许多内存泄漏是由于忘记了范围内的变量造成的。

参考文献: