标签:双层 图片 单例模式 lan 可变 创建 不可变 构造 设计模式
整个系统中只有一个实例存在。
饿汉模式
public class Singleton{
private static final Singleton instance = new Singleton();//自己创造自己,保证唯一不可变
private Singleton(){}//构造方法私有化
public static Singleton getInstance(){ //对外暴露接口,以调用这个单列
return instance;
}
}
程序一开始便会创建一个实例 ,如果一直没有使用它,会造成一定的内存资源浪费。
懒汉模式
public class Singleton{
private static Singleton instance;//不实例化
private Singleton(){};
public static Singleton getInstance(){
if( instance == null ){//如果实例为空则创建一个实例
instance = new Singleton();
}
return instance;
}
}
不足:当有多个同时请求时,可能会造成创造出多个实例。
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if( instance == null ){//如果实例为空则创建一个实例
instance = new Singleton();
}
return instance;
}
}
public class Singleton{
private static volatile Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if( instance == null ){//如果实例为空则创建一个实例
sysnchronized(Singleton.class){
if(instance == null ){
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类
public class Singleton{
private Singleton(){};
//声明一个静态内部类
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
//提供一个共有方法,调用返回内部类
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
说明:
枚举模式
public class SingletonTest{
public static void main(String[] args){
Singleton instance = Singleton.INSTANCE;
}
}
enum Singleton{
INSTANCE;
}
说明:此方法可以避免多线程同步问题,而且还能防止反序列化重新创建新的对象。
? 在JDK中java.lang.Runtime使用到了单列模式的饿汉式。
标签:双层 图片 单例模式 lan 可变 创建 不可变 构造 设计模式
原文地址:https://www.cnblogs.com/Mhang/p/12408647.html