单例模式是一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,是一个比较简单的模式。
代码:
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getSingleton(){
return singleton;
}
}
使用场景:
- 生成唯一序列号的环境;
- 整个项目中需要一个共享访问点或共享数据;
- 创建一个对象需要消耗的资源过多;
- 需要定义大量的静态常量和静态方法的环境,可以采用单例模式;
线程不安全的单例:
public class Singleton {
private static Singleton singleton = null;
private Singleton(){}
public static Singleton getSingleton(){
if (null==singleton){
singleton = new Singleton();
}
return singleton;
}
}
解决方法:
在方法上加上synchronized
关键字:
public class Singleton {
private static Singleton singleton = null;
private Singleton(){}
public synchronized static Singleton getSingleton(){
if (null==singleton){
singleton = new Singleton();
}
return singleton;
}
}
说明:通用代码通常称作为懒汉是,单例不安全模式通常称为饿汉式。