1. 饿汉模式:
public class Singleton5 {
//1.定义一个本类类型的私有静态对象
private static Singleton5 instance =new Singleton5();
//2.私有构造器
private Singleton5(){}
//3.静态公有方法用来返回该类的唯一实例
public static Singleton5 getSingleton(){
return instance;
}
}
2. 饿汉模式变种:
public class Singleton1 {
//饿汉式变种
//1.定义一个本类类型的私有静态对象
private static Singleton1 instance;
static{
instance=new Singleton1();
}
//2.私有构造器
private Singleton1(){}
//3.静态公有方法用来返回该类的唯一实例
public static Singleton1 getSingleton(){
return instance;
}
}
3. 懒汉模式,线程不安全:
public class Singleton3 {
//懒汉式,线程不安全
//1.定义一个本类类型的私有静态对象
private static Singleton3 instance;
//2.私有构造器
private Singleton3(){}
//3.静态公有方法用来返回该类的唯一实例
public static Singleton3 getSingleton(){
if(instance==null){
instance=new Singleton3();
}
return instance;
}
}
4. 懒汉模式,线程安全:
public class Singleton2 {
//懒汉式,线程安全
//1.定义一个本类类型的私有静态对象
private static Singleton2 instance;
//2.私有构造器
private Singleton2(){}
//3.静态公有方法用来返回该类的唯一实例
public static synchronized Singleton2 getSingleton(){
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
5. 双重校验锁:
public class Singleton4 {
//双重校验锁
//1.定义一个本类类型的私有静态对象
private static Singleton4 instance;
//2.私有构造器
private Singleton4(){}
//3.静态公有方法用来返回该类的唯一实例
public static Singleton4 getSingleton(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=new Singleton4();
}
}
}
return instance;
}
}
6. 静态内部类:
public class Singleton {
// 静态内部类
// 1.定义一个静态内部类
private static class SingletonHandler {
private static final Singleton instance = new Singleton();
}
// 2.私有构造器
private Singleton() {
}
// 3.静态公有方法用来返回该类的唯一实例
public static Singleton getSingleton() {
return SingletonHandler.instance;
}
}
7. 枚举:
public enum Singleton6 {
instance;
public void whateverMethod(){
}
}