我理解单例设计模式概念,但我从未真正遇到过在java应用程序或基于Web的应用程序中实现单例模式。 那么告诉我在实时应用中我们在哪里使用这种方法。
答案 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,这些事情对于每个用户应该是相同的实例,否则您将耗尽资源。或者我弄错了什么?