单例模式实现的两种方式

一:饿汉式

class Singleton {
 // 1.私有化构造器
 private Singleton() {
 }
 // 2.内部提供一个当前类的实例
 // 4.此实例也必须静态化
 private static Singleton single = new Singleton();
 // 3.提供公共的静态的方法,返回当前类的对象
 public static Singleton getInstance() {
 return single;
 }
}

二:懒汉式

class Singleton {
 // 1.私有化构造器
 private Singleton() {
 }
 // 2.内部提供一个当前类的实例
 // 4.此实例也必须静态化
 private static Singleton single;
 // 3.提供公共的静态的方法,返回当前类的对象
 public static Singleton getInstance() {
 if(single == null) {
 single = new Singleton();
 }
 return single;
 }
}

饿汉式VS懒汉式

饿汉式:

  • 特点:立即加载,即在使用类的时候已经将对象创建完毕。
  • 优点:实现起来简单;没有多线程安全问题。
  • 缺点:当类被加载的时候,会初始化 static 的实例,静态变量被创建并分配内存空间,从这以后,这个 static 的实例便一直占着这块内存,直到类被卸载时,静态变量被摧毁,并释放所占有的内存。因此在某些特定条件下会耗费内存

懒汉式:

  • 特点:延迟加载,即在调用静态方法时实例才被创建。
  • 优点:实现起来比较简单;当类被加载的时候,static 的实例未被创建并分配内存空间,当静态方法第一次被调用时,初始化实例变量,并分配内存,因此在某些特定条件下会节约内存
  • 缺点:在多线程环境中,这种实现方法是完全错误的,线程不安全,根本不能保证单例的唯一性。

单例模式的优点及应用场景

优点

由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比

较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时

直接产生一个单例对象,然后永久驻留内存的方式来解决。举例:

应用场景

  • Windows 的 Task Manager (任务管理器)就是很典型的单例模式
  • Windows 的 Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
  • Application 也是单例的典型应用
  • 应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
  • 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。

发表回复

后才能评论

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源