gpt4 book ai didi

java - 在应用程序范围内共享一个对象

转载 作者:行者123 更新时间:2023-11-29 08:07:58 25 4
gpt4 key购买 nike

在应用程序范围内使用一个对象是很常见的。通过应用程序共享对象有哪些不同的模式/模型/方式?

定义一个“主类”,然后设置一个成员变量并从这个“主类”扩展所有其他类是一种好方法吗?创建静态类可能是更好、更简洁的方法吗?您喜欢哪种模式?

最佳答案

It's common to have an object used application wide. What are the different patterns / models / ways to share an object through an application?

一种常见的方法是使用单例模式。不过我会避免这种情况。

Is defining a "main class", then setting a member variable and extending all other classes from this "main class" a good way

绝对不是。撇开其他不谈,如果它是一个实例 变量,那么无论如何它都不会与您的其他类的实例“共享”。这也是对继承的完全滥用,这肯定会在任何规模很大的应用程序中给您带来沉重的打击——您的其他类在逻辑上不会与您的“主”类有继承关系,对吗?作为一般规则,只有在真正合适的情况下才应使用继承,而不是为了快速修复。

What's your prefered pattern?

依赖注入(inject)。当您的应用程序启动时,创建所有需要相互了解的适当对象,并告诉它们(通常在构造函数中)它们的依赖关系。如果合适的话,几个不同的对象都可以依赖于同一个对象。您可以使用可用的许多依赖注入(inject)框架之一来轻松实现这一目标。

依赖注入(inject)通常比使用单例效果更好,因为:

  • 类本身并不知道依赖项是否实际上是共享的;它为什么要关心?
  • 全局状态使单元测试更加困难
  • 每个类在声明时都会使其依赖关系更加清晰 - 这样就可以更轻松地在应用程序中导航并查看类之间的关系。

单例和全局工厂适合日志记录之类的事情——但即便如此,这也意味着测试类的日志记录方面相对困难。创建一个可以完成您需要的依赖项并将其传递给被测对象要简单得多,这比添加处理单例的方法(通常在初始化后保持“固定”)要简单得多。

关于java - 在应用程序范围内共享一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com