Java单例模式浅析 (Singleton模式)

   之所以说是浅析单例模式是因为其实单例模式有很多种实现的写法,比如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区域,实际上也是占用内存的,只是不会每次都开辟内存而已。

你可能感兴趣的:(Singleton)