你的位置:首页 > 软件开发 > ASP.net > 深入解析单例模式

深入解析单例模式

发布时间:2016-01-14 18:00:53
单例模式在程序设计中非常的常见,一般来说,某些类,我们希望在程序运行期间有且只有一个实例,原因可能是该类的创建需要消耗系统过多的资源、花费很多的时间,或者业务上客观就要求了只能有一个实例。一个场景就是:我们的应用程序有一些配置文件,我们希望只在系统启动的时候读取这些配置文件,并将 ...

  单例模式在程序设计中非常的常见,一般来说,某些类,我们希望在程序运行期间有且只有一个实例,原因可能是该类的创建需要消耗系统过多的资源、花费很多的时间,或者业务上客观就要求了只能有一个实例。一个场景就是:我们的应用程序有一些配置文件,我们希望只在系统启动的时候读取这些配置文件,并将这些配置保存在内存中,以后在程序中使用这些配置文件信息的时候不必再重新读取。

定义:

  由于某种需要,要保证一个类在程序的生命周期当中只有一个实例,并且提供该实例的全局访问方法。

结构:

  一般包含三个要素:

  1.私有的静态的实例对象 private static instance

  2.私有的构造函数(保证在该类外部,无法通过new的方式来创建对象实例) private Singleton(){}

  3.公有的、静态的、访问该实例对象的方法 public static Singleton getInstance(){}

UML类图:

深入解析单例模式

  饥汉式:顾名思义懒汉式就是应用刚启动的时候,不管外部有没有调用该类的实例方法,该类的实例就已经创建好了。以空间换时间。

  饥汉式的优点:写法简单,在多线程下也能保证单例实例的唯一性,不用同步,运行效率高。

  饥汉式的缺点:在外部没有使用到该类的时候,该类的实例就创建了,若该类实例的创建比较消耗系统资源,并且外部一直没有调用该实例,那么这部分的系统资源的消耗是没有意义的。

 下面是懒汉式单例类的演示代码:

 1 package singleton; 2  3 /** 4  * 懒汉式单例类 5 */ 6 public class LazySingleton { 7  8   //私有化构造函数,防止在该类外部通过new的形式创建实例 9   private LazySingleton() {10     System.out.println("生成LazySingleton实例一次!");11   }12 13   //私有的、静态的实例,设置为私有的防止外部直接访问该实例变量,设置为静态的,说明该实例是LazySingleton类型的唯一的14   //若开始时,没有调用访问实例的方法,那么实例就不会自己创建15   private static LazySingleton lazyInstance = null;16 17   //公有的访问单例实例的方法,当外部调用访问该实例的方法时,实例才被创建18   public static LazySingleton getLazyInstance() {19     //若实例还没有创建,则创建实例;若实例已经被创建了,则直接返回之前创建的实例,即不会返回2个实例20     if (lazyInstance == null) {21       lazyInstance = new LazySingleton();22     }23     return lazyInstance;24   }25 }

原标题:深入解析单例模式

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录