之所以说是浅析单例模式是因为其实单例模式有很多种实现的写法,比如lazy initialization思想带来同步锁的实现方式纠结起细节来就可以写出很多种,这里我主要说一种实现的方式,也是最简单的—静态成员直接初始化的方式。
为什么会产生单例这个设计模式?主要是,如果我们在开发的过程中,每个实例都新建一个的话,会产生很多的内存开销,这对JVM不是什么好事,除此以外,如果很多实例,当这些实例不需要了,JVM去回收又是一件麻烦事,所以对于一些实例,如果确定可以共享,就不如一起共享一个,节省内存,提高性能。
1 /** 2 * 3 * @author LingJian 4 * 5 */ 6 public class Car { 7 //Singleton的其中一种写法 有多种写法 8 //分配在static块 这样就保持一致都存在 9 private static Car c = new Car(); 10 11 //防止自己new 这样就不能Car c = new Car() 即不能生成多个实例 12 private Car() { 13 14 } 15 16 public static Car getInstance() { 17 return c; 18 } 19 20 public void run() { 21 System.out.println("car run"); 22 } 23 }
1 /** 2 * 3 * @author LingJian 4 * 5 */ 6 public class Test { 7 8 /** 9 * @param args 10 */ 11 public static void main(String[] args) { 12 //singleton 13 Car c = Car.getInstance(); 14 Car cc = Car.getInstance(); 15 if(c == cc) System.out.println("the same car"); 16 c.run(); 17 } 18 19 }
这是最简单的实现单例模式的方法,但是它的不足之处在于不管这个资源是否被调用,它都一直分配在static区域,实际上也是占用内存的,只是不会每次都开辟内存而已。