我已阅读this SO article ,这告诉我们单例是非常非常邪恶的,应该像流行病一样避免。它还告诉我们,单例就像“全局”一样。
这让我想知道我是否真的需要一些类似于程序运行时状态的东西,单例会是一个坏主意吗?
例如,我有一个 JavaFX 应用程序,它可以生成许多窗口。每个窗口至少有两个样式表 - 一个用于控制布局(如对齐等),另一个用于主题。
主题样式表可以在运行时切换到另一个主题样式表,并且它应该全局影响在该实例中打开的所有窗口。对我来说,创建一个具有 ObservableList
样式表的单例类是有意义的,所有窗口都可以将其 Scene
的样式表属性绑定(bind)到该类。
这真的是一个坏主意吗?如果它影响测试,它对测试的负面影响到底有多大?我知道每个窗口都应该彼此独立地进行测试,但实际行为是所有窗口都应该在主题上看起来相同。此外,我认为它不应该影响其他区域,每个窗口实际上应该彼此独立。
如果这真的很糟糕,那么在上面的示例中应该采取什么方法才能达到相同的结果?
最佳答案
实际上,您可以使用依赖注入(inject)来获得相同的行为。
在应用程序的主线中,您将实例化一个类似 UIContext
的类,每当您打开一个新窗口时,您都会将该 UIContext
实例赋予其构造函数。
所有窗口共享相同的 UIContext
实例,但它不是单例,只是您将整个 UIContext
注入(inject)到许多其他依赖类中。
也就是说,如果您需要实现测试,您可以毫不费力地向您的窗口提供示例/假 UIContext
。
关于java - 我应该使用单例作为程序状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41052646/