设计模式学习笔记-单例模式
设计模式学习笔记-单例模式
在网上学习了一段时间,总结了经典的2种单例模式的java写法
写法1:
?
package org.star_java.designpattern;public class Singleton1{//volatile保证每次取instance都从主内存读取private volatile static Singleton1 instance = null;//保证无法new出这个类public Singleton1(){super();}public static Singleton1 getInstance(){if (instance != null)//DCL 双锁检测{synchronized (Singleton1.class)//线程安全{if (instance != null)//保证单例{instance = new Singleton1();}}}return instance;}}?
写法2:
?
package org.star_java.designpattern;public class Singleton2{//保证无法new出这个类public Singleton2(){super();}//由JVM保重线程安全以及类的初始化和单例private static class SingletonHolder{static final Singleton2 Instance = new Singleton2();}public static Singleton2 getInstance(){return SingletonHolder.Instance;}}注意事项:
1.单例模式一定要有一个private的构造器,防止new类
2.单例模式最好不要实现Cloneable,Serializable这样的接口,防止从这些途径生成类
3.单例模式要防止通过反射的setAccessible方法来突破private够着函数的限制,但是这些一般不需要自己处理,由应用服务器后台保证