1.定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
2.分类
2.1饿汉式,线程安全
public class Singleton {
private static Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
}
2.2饱汉式
2.2.1线程不安全式
public class Singleton02 {
private static Singleton02 singleton=null;
private Singleton02(){
}
public static Singleton02 getSingleton(){
if(singleton==null){
singleton= new Singleton02();
}
return singleton;
}
}
2.2.2双重检查模式线程安全
public class Singleton03 {
private static Singleton03 singleton=null;
private Singleton03(){
}
public static Singleton03 getSingleton(){
if(singleton==null){
synchronized (Singleton03.class){
if(singleton==null){
singleton=new Singleton03();
}
}
}
return singleton;
}
}
2.2.3使用枚举
public enum Singleton04 {
INSTANCE;
}
题外话:Joshua Bloch大神提倡使用枚举可以避免反序列化破坏对象同时还保证了线程安全。
这差不多就是常见单例模式的写法了,当然还有其他的一些方式不过我懒了