单身人士课程(Singleton Classes)
优质
小牛编辑
126浏览
2023-12-01
Singleton的目的是控制对象创建,将对象数量限制为只有一个。 由于只有一个Singleton实例,Singleton的任何实例字段每个类只会出现一次,就像静态字段一样。 单身人士通常控制对资源的访问,例如数据库连接或套接字。
例如,如果您的数据库只有一个连接的许可证,或者您的JDBC驱动程序遇到多线程问题,则Singleton会确保只建立一个连接,或者一次只能有一个线程访问该连接。
实施单身人士
例子1 (Example 1)
最简单的实现包括一个私有构造函数和一个保存其结果的字段,以及一个名为getInstance()的静态访问器方法。
私有字段可以从静态初始化程序块中分配,或者更简单地使用初始化程序分配。 getInstance()方法(必须是公共的)然后只返回此实例 -
// File Name: Singleton.java
public class Singleton {
private static Singleton singleton = new Singleton( );
/* A private Constructor prevents any other
* class from instantiating.
*/
private Singleton() { }
/* Static 'instance' method */
public static Singleton getInstance( ) {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod( ) {
System.out.println("demoMethod for singleton");
}
}
这是我们将创建单个对象的主程序文件 -
// File Name: SingletonDemo.java
public class SingletonDemo {
public static void main(String[] args) {
Singleton tmp = Singleton.getInstance( );
tmp.demoMethod( );
}
}
这将产生以下结果 -
输出 (Output)
demoMethod for singleton
例子2 (Example 2)
以下实施显示了经典的Singleton设计模式 -
public class ClassicSingleton {
private static ClassicSingleton instance = null;
private ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}
ClassicSingleton类维护对单个单例实例的静态引用,并从静态getInstance()方法返回该引用。
在这里,ClassicSingleton类采用一种称为延迟实例化的技术来创建单例; 因此,在第一次调用getInstance()方法之前,不会创建单例实例。 此技术可确保仅在需要时创建单例实例。