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

时间:2015-08-11 17:53:33

标签: java singleton

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

2 个答案:

答案 0 :(得分:2)

正如模式所描述的那样,只要你想在那里只存在某个单个实例,就可以使用Singleton模式。

一个常见示例可能是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");

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

答案 1 :(得分:1)

Singleton在处理繁重的对象时总是有意义的,在整个应用程序中有多个实例是没有意义的。 由于您正在处理Web应用程序,因此您应该处理每个用户/会话/请求相同的对象。 Database-Connection-Pool可能是一个很好的例子,或者是一个Servlet。为每个请求创建一个新的池是没有意义的。整个应用程序的一个池应该足够了。其他示例可能是Loggers,Email-Client,Global-Settings,这些事情对于每个用户应该是相同的实例,否则您将耗尽资源。或者我弄错了什么?