饿汉式
public class Singleton1 {
private static Singleton1 instance = new Singleton1();
private Singleton1(){
}
public Singleton1 getInstance(){
return instance;
}
}
懒汉式
public class Singleton2 {
private static Singleton2 instance = null;//创建的时机
private Singleton2(){
}
public Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
Double-Check-Lock(DCL)
public class Singleton5 {
private static Singleton5 instance = null;//创建的时机
private Singleton5(){
}
public static Singleton5 getInstance(){
if(instance==null){
synchronized(Singleton5.class){
if(null==instance){
instance=new Singleton5();
}
}
}
return instance;
}
}
DCL+volatile
public class Singleton6 {
private volatile static Singleton6 instance = null;//保证有序性
private Singleton6(){
}
public static Singleton6 getInstance(){
if(instance==null){
synchronized(Singleton6.class){
if(null==instance){
instance=new Singleton6();
}
}
}
return instance;
}
}
Holder模式
public class Singleton7 {
private volatile static Singleton7 instance = null;//保证有序性
private Singleton7(){
}
private static class Holder{
private static Singleton7 instance = new Singleton7();
}
public static Singleton7 getInstance(){
return Holder.instance;
}
}
枚举模式
public enum Singleton8 {
uniqueInstance;// 定义一个枚举的元素,它就代表了Singleton的一个实例
public void singletonOperation() {
// 功能处理
System.err.println("功能处理");
}
}
《剑指offer》java语言优化版——实现Singleton模式
最新推荐文章于 2022-01-30 23:00:50 发布