单例模式主要有5种形式。
1、饿汉式最基本形式
package com.company.designMode;
public class Singleton1 {
// 单例模式,饿汉式
// 构造函数私有化
private Singleton1(){
}
// 创建对象
private static final Singleton1 singleton1=new Singleton1();
// 公有方法返回
public static Singleton1 getInstance(){
return singleton1;
}
}
2、饿汉式静态代码块
package com.company.designMode;
public class Singleton2 {
// 单例模式,饿汉式静态代码块
// 构造函数私有化
private Singleton2(){
}
// 创建对象
private static Singleton2 singleton2;
// 静态代码块
static{
singleton2 = new Singleton2();
}
// 公有方法返回
public static Singleton2 getInstance(){
return singleton2;
}
}
3、懒汉式线程不安全
package com.company.designMode;
public class Singleton3 {
// 懒汉式,线程不安全
// 构造函数私有化
private Singleton3(){
}
// 声明对象
private static Singleton3 singleton3;
// 公有方法返回
public static Singleton3 getInstance(){
if(singleton3==null){
singleton3=new Singleton3();
}
return singleton3;
}
}
4、懒汉式双重检验锁(DCL)
package com.company.designMode;
public class Singleton4 {
// 懒汉式,双重检验锁(DCL)
// volatile,synchronized,两个if
// 构造函数私有化
private Singleton4(){
}
// 声明对象
private static volatile Singleton4 singleton4;
// 公有方法返回
public static Singleton4 getInstance(){
if(singleton4==null){
synchronized(Singleton4.class){
if(singleton4==null){
singleton4=new Singleton4();
}
}
}
return singleton4;
}
}
5、懒汉式静态内部类
package com.company.designMode;
public class Singleton5 {
// 懒汉式,静态内部类实现
// 构造函数私有化
private Singleton5(){
}
// 静态内部类
private static class Singleton{
private static final Singleton5 singleton5=new Singleton5();
}
// 公有方法返回
public static Singleton5 getinstance(){
return Singleton.singleton5;
}
}