我知道如何在Java中制作单例类,但我不明白的是单例的概念。就像为什么我需要单身人士课程,为什么我要使用单身人士而不是常规课程?
“ Singleton模式限制了类的实例并确保 Java虚拟中仅存在该类的一个实例 机器。”
我只是读过该定义,但我不明白,如果有一个或多个类的实例,它会发生什么变化。 为什么我只想拥有一个类的一个实例。
答案 0 :(得分:0)
当您只需要一个类的一个实例时,整个应用程序就会共享它们。
该原理的好例子是负责访问外部资源的类。例如,您希望整个应用程序共享相同的数据库连接(或至少共享连接池),而不是让每个需要它的类都打开自己的连接。
答案 1 :(得分:0)
字母是具有可在相同上下文中与其他类共享的属性的类。 (应用程序,会话等) 例如,如果您必须计算Web应用程序中的已连接用户数。每次用户连接时,您都会在唯一的共享类中增加一个计数器。
答案 2 :(得分:0)
在某些情况下,我们需要在整个应用程序中公开共享资源,例如数据库连接,但我们不想
然后我们可以使用Singleton设计模式。
典型的Singleton类看起来像
public class MySingleton {
private MySingleton INSTANCE
private MySingleton() {
}
public static MySingleton getInstance() {
if (INSTANCE == null) {
syncronized (MySingleton.class) {
if (INSTANCE == null) {
INSTANCE = new MySingleton();
}
}
}
return INSTANCE;
}
// instance methods exposing business operation
}
但是我们可以通过使每个实例方法(将业务操作公开为静态)来实现类似的行为。在这种方法中,我们甚至不需要创建单个对象。
那我们为什么需要Singleton?
好吧,答案很简单。与客户端隔离实际的实现。基本上,我们在这里应用抽象 OOP原理。
如果单例类是供各种客户端使用的库的一部分,并且库希望根据客户端更改实现,则这很有用。
此类单例的样本可以是
public class MySingleton {
private MySingleton INSTANCE
private MySingleton() {
}
public static MySingleton getInstance() {
if (INSTANCE == null) {
syncronized (MySingleton.class) {
if (INSTANCE == null) {
INSTANCE = new MySingletonChild(); // here we are creating an object of subclass of MySingleton.
}
}
}
return INSTANCE;
}
// instance methods exposing business operation
}
希望这有助于理解Singleton设计模式。