zoukankan      html  css  js  c++  java
  • 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区域,实际上也是占用内存的,只是不会每次都开辟内存而已。

  • 相关阅读:
    C# 在代码中创建 DataTable 和从数据库取出的数据 DataTable
    C#编程数据库操作之DataTable
    测试代码的运行时间(C#)
    时间天数 的使用
    遍历panel 上的控件,然后操作
    break 和 continue区别
    DataTable排序的一般方法
    MG758 GIS数据采集终端
    C#中DataTable
    android InputStream相关类
  • 原文地址:https://www.cnblogs.com/iou123lg/p/3019384.html
Copyright © 2011-2022 走看看