我已经阅读了有关单例在代码中引起问题的所有原因,但是在以下情况下我找不到替代方法。
我有一个Java Swing应用程序。用户可以通过GUI设置影响应用程序的显示和功能的设置,并且这些设置存储在XML配置文件中并进行检索。当应用程序加载时,将构建一个SettingsManager对象。在构造函数中,设置管理器解析XML配置文件并将所有设置本地存储以进行快速访问(我将其称为缓存)。当应用程序中的设置更改时,该设置将立即写入文件,但同时也会更新缓存。
问题
如果创建多个设置管理器实例,则在一个实例中更改设置时,其他实例的缓存将变得陈旧。如果不使用单例,则修复此问题的一种可能方法是不使用缓存,而只需始终从文件中检索设置。这不是一个可怕的想法,但它并不理想。如果我这样做,我认为我必须付出额外的努力使其线程安全。
为什么单例有所帮助
如果SettingsManager是单例,那么只有一个缓存,因此它永远不会过时。然而,我已经看到这不是一个好主意,因为现在它本质上是一个全局变量,而不需要访问设置的类现在可以访问它们。从我所阅读的内容来看,还有许多其他问题。
因此,是否有其他方法来设计这个问题,而不使用单例来解决问题呢?