一:饿汉式单例模式
package com.zkn.newlearn.gof.singleton;
/**
*
* 饿汉式单例模式
* @author zkn
*
*/
public class SingletonTest01{
/**
* 加载类时,立即加载对象,是没有延迟的。是天然的线程安全的
*/
private static SingletonTest01 singleton = new SingletonTest01();
/**
* 构造器私有化
*/
private SingletonTest01() {
}
/**
* 返回这个对象
*/
public static SingletonTest01 getInstance(){
return singleton;
}
public void test(){
System.out.println("我是饿汉式单例模式");
}
}
二:懒汉式单例模式
package com.zkn.newlearn.gof.singleton;
/**
*
* @author zkn
*
*/
public class SingletonTest02 {
private static SingletonTest02 singleton;
/**
* 构造器私有化
*/
private SingletonTest02() {
}
public static synchronized SingletonTest02 getInstance(){
if(singleton == null){
singleton = new SingletonTest02();
}
return singleton;
}
public void test(){
System.out.println("我是懒汉是单例模式");
}
}
三:静态内部类
package com.zkn.newlearn.gof.singleton;
/**
* 静态内部类 线程安全 延迟加载 调用效率高
* @author zkn
*
*/
public class SingletonTest04 {
private static class SingletonClassInstance{
private static final SingletonTest04 single = new SingletonTest04();
}
private SingletonTest04() {
}
public static SingletonTest04 getInstance() {
return SingletonClassInstance.single;
}
}
四:枚举(单元素)
package com.zkn.newlearn.gof.singleton;
/**
*
* 枚举实现单例 避免反射漏洞 jvm层面是安全的
* @author zkn
*
*/
public enum SingletonTest05 {
/**
* 枚举元素本身就是单例
*/
INSTANCE;
}