1.常见的单例写法:
单例在开发中用经常被用到,它的特点就像名字一样,在单进程中只会创建一个实例,并提供一个访问它的全局访问点。
常见的单例写法有:
1 懒汉式【线程不安全】
2 懒汉式【****synchronized 线程安全】
3 饿汉式【线程安全】
4 DCL双重校验模式【线程安全】
5 静态内部类单例模式【线程安全】
6 枚举单例【线程安全】
7 使用容器实现单例模式
这里只介绍其中推荐使用的一种 静态内部类单例模式。
2.原理分析
举个栗子:
public class InStanceDemo {
private InStanceDemo() {
}
public static final InStanceDemo getInstance() {
return InstanceHolder.inStance;
}
private static class InstanceHolder {
public static final InStanceDemo inStance =new InStanceDemo();
}
}
在这个栗子中,其中的 InStanceDemo 只能通过getInstance()来获得实例。
1.首先InStanceDemo 的构造函数为private修饰的,所以不可以通过new 来新建实例,从而控制了新建实例的途径。
2.这里使用一个静态内部类InstanceHolder 内部的静态参数InStance来控制新建InstanceDemo ,你可能问为什么这么做,这里说明下这么做的好处:
在第一次调用 InStanceDemo.getInstance的时候,会先走静态内部类,对静态内部类中的参数进行加载,从而创建InStanceDemo 的实例,并且 当第二次调用getInstance的时候,静态内部类中的参数已经加载完成,所以只会加载一次,同时,只有在去第一次调用getInstance 的时候才会去创建InStanceDemo 的实例,不调用是并不会创建,从而节省了内存空间,减少了内存消耗。同时 线程是安全的,不必担心线程安全问题。
其他模式参考:http://www.jcodecraeer.com/plus/view.php?aid=8613