定义:Ensure a class has only one instance, and provide a global point of access
to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实
例。)
通用代码:(是线程安全的)
public class Singleton {
private static final Singleton singleton = new Singleton();
//限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton(){
return singleton;
}
//类中其他方法,尽量是 static
public static void doSomething(){
}
}
使用场景:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数
器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确
保是线程安全的;
● 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式
(当然,也可以直接声明为 static 的方式)。
线程不安全实例:
 
public class Singleton {
private static Singleton singleton = null;
//限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton(){
if(singleton == null){
singleton = new Singleton();}
return singleton;
}
}解决办法:
在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增
加 synchronized 来实现。