java - 我需要与许多其他对象共享一个对象——我读过关于单例的投诉,那么我应该使用什么来代替?

标签 java design-patterns singleton

我有一个带有几个 JFrame 窗口的 Java 应用程序,它们都派生自一个名为 BaseWindow 的类。这些窗口中的每一个都需要访问 NetworkConnection 对象以将消息发送到服务器。所以我将 NetworkConnection 对象实现为单例,并在 BaseWindow 类中使用

为每个窗口提供对它的引用
NetworkConnection networkConnectinon = NetworkConnection.getInstance();

这工作正常。但是,如果现在使用单例不是很好的做法,我想改变它。那我应该用什么来代替呢?

最佳答案

静态 getInstance() 方法使测试您的应用程序变得更加困难,因为您无法将 NetworkConnection 替换为模拟对象,或使用新的 NetworkConnection 实例对于每个单元测试。

您的主类最好通过构造函数将 NetworkConnection 对象注入(inject)每个 JFrame - 并创建一个 NetworkConnection 接口(interface),这样您就可以使用真实的 NetworkConnection 或模拟的。

这就是依赖注入(inject)模式。

请注意,如果需要,您的真实网络连接可能仍然是单例 - 这只是将它提供给需要它的对象的一种不同方式。

关于java - 我需要与许多其他对象共享一个对象——我读过关于单例的投诉,那么我应该使用什么来代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9582419/

相关文章:

scala - 如何设计不同类型的(几乎)相同的(在 Scala 中)

ruby - 如何在单例类上定义类变量

c++ - 使用单例仅连接一次数据库

java - 在乘法中使用 double (java)

java - Java 中的并行 Web 服务调用

java - Jetty ServletTester类打包在哪里?

c# - 从泛型类返回一个单例

java - 在java中将按钮的二维数组从一个类返回到另一个类

javascript - react 上下文: Nested re-use/enhancement (anti-pattern?)

java - 客户端请求Bucket信息的设计