在实时 java 应用程序中使用单例设计模式

use of singleton design pattern in real time java applications

我了解单例设计模式的概念,但我从未真正在 java 应用程序或基于 Web 的应用程序中实现过单例模式。 那么请告诉我我们在实时应用程序中的哪些地方使用了这种方法。

在处理繁重的对象时,单例总是有意义的,而在整个应用程序中拥有多个实例是没有意义的。 由于您正在处理 Web 应用程序,因此您应该已经处理了每个 user/session/request 相同的对象。 Database-Connection-Pool 可能是一个很好的例子,或者一个 Servlet。为每个请求创建一个新的 Pool 是没有意义的。整个应用程序的一个池应该足够了。其他示例可能是记录器、电子邮件客户端、全局设置,这些东西对于每个用户应该是相同的实例,否则您将 运行 资源不足。还是我弄错了什么?

正如该模式所描述的,任何时候您希望只存在某个事物的 单个 实例时,您可以使用单例模式。

一个常见的例子可能是 Logger 对象。整个系统中可能有很多地方可以调用记录器来记录一些东西。但是您可能只需要一个这样的实例。如果构建实例是一项繁重的操作,则尤其如此。

像这样:

public class Logger {
    private static final Logger INSTANCE = new Logger();

    private Logger() {
        // do something to initialize the logger
    }

    public static Logger getInstance() {
        return INSTANCE;
    }

    // implementation ...
}

然后任何需要引用记录器的代码都不需要实例化它(事实上不能),而是只使用单例:

Logger.getInstance().Log("some message");

其他现实世界的例子可能包括依赖注入容器、只读数据访问服务(例如缓存结果的查找服务)等。通常任何初始化或重复操作可能很繁重的东西线程安全。