Singleton的目的是控制对象的创建,将对象的数量限制为一个。由于只有一个Singleton实例,因此Singleton的任何实例字段在每个类中只会出现一次,就像static 字段一样。单例通常控制对资源的访问,例如数据库连接或Socket。
例如,如果您仅对数据库的一个连接拥有许可证,或者JDBC驱动程序在多线程处理方面遇到问题,则Singleton确保仅建立一个连接或一次只能访问一个线程。
实施单例
例子1
最简单的实现包括一个私有构造函数和一个用于保存其输出的字段,以及一个名为getInstance()的static 访问器方法。
可以从static 初始化程序块中或更简单地使用初始化程序来分配私有字段。然后,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( ); } }
这将产生以下输出-
输出
demoMethod for singleton
例子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类维护对单个单例实例的static 引用,并从static getInstance()方法返回该引用。
在这里,ClassicSingleton类采用了一种称为惰性实例化的技术来创建单例。输出,直到第一次调用getInstance()方法时,才创建单例实例。此技术可确保仅在需要时才创建单例实例。
参考链接
https://www.learnfk.com/java/java-using-singleton.html
标签:Singleton,Java,getInstance,无涯,static,单例,ClassicSingleton,public From: https://blog.51cto.com/u_14033984/8790433