作者:因情语写
链接:https://www.proprogrammar.com/article/440
声明:请尊重原作者的劳动,如需转载请注明出处
单例的实现有多种,有懒汉模式,饿汉模式,枚举方式,静态内部类方式等等,下面说说上面的四种
懒汉模式:加载类时就初始化单例
package creational.pattern.singleton;
public class HungrySingleton {
// 类初始化时获得实例
private static HungrySingleton INSTANCE = new HungrySingleton();;
// 私有化构造器,只能通过getInstance方法获得单例
private HungrySingleton(){}
// 获取单例实例
public static HungrySingleton getInstance()
{
return INSTANCE;
}
}
饿汉模式(双重校验锁)
package creational.pattern.singleton;
import java.io.Serializable;
/*
* jdk 1.5 后可以保证多线程下的安全
*/
public class DoubleCheckedLockingSingleton implements Serializable {
private static final long serialVersionUID = -1926737179243132977L;
private static DoubleCheckedLockingSingleton INSTANCE;
private DoubleCheckedLockingSingleton() {
}
public static DoubleCheckedLockingSingleton getInstance() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
if (null == INSTANCE) {
synchronized (DoubleCheckedLockingSingleton.class) {
if (null == INSTANCE)
INSTANCE = (DoubleCheckedLockingSingleton) getClass("creational.pattern.singleton.DoubleCheckedLockingSingleton").newInstance();
}
}
return INSTANCE;
}
// 应对不同的类加载器
private static Class getClass(String classname) throws ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null)
classLoader = DoubleCheckedLockingSingleton.class.getClassLoader();
return (classLoader.loadClass(classname));
}
// 应对序列化与反序列化
private Object readResolve()
{
return INSTANCE;
}
}
枚举方式,枚举只有一个private的构造方法,可以用来做单例模式
package creational.pattern.singleton;
enum EnumSingleton {
INSTANCE;
}
静态内部类方式
package creational.pattern.singleton;
/*
* 可以实现懒加载
*/
public class StaticInnerSingleton {
private static class SingletonHolder{
private static StaticInnerSingleton INSTANCE = new StaticInnerSingleton();
}
private StaticInnerSingleton(){}
public static StaticInnerSingleton getInstance()
{
return SingletonHolder.INSTANCE;
}
}
亲爱的读者:有时间可以点赞评论一下
月份 | 原创文章数 |
---|---|
202206 | 4 |
202205 | 2 |
202204 | 1 |
202203 | 11 |
202201 | 2 |
202108 | 7 |
202107 | 3 |
202106 | 16 |
202105 | 10 |
202104 | 16 |
202103 | 56 |
202102 | 14 |
202010 | 3 |
202009 | 3 |
202008 | 7 |
202007 | 7 |
202006 | 10 |
202005 | 11 |
202004 | 22 |
202003 | 52 |
202002 | 44 |
202001 | 83 |
201912 | 52 |
201911 | 29 |
201910 | 41 |
201909 | 99 |
201908 | 35 |
201907 | 73 |
201906 | 121 |
201811 | 1 |
201810 | 2 |
201804 | 1 |
201803 | 1 |
201802 | 1 |
201707 | 1 |
全部评论