设计模式之单例模式

文章详细介绍了Java中实现单例设计模式的五种方法,包括饿汉式、懒汉式、双重检查、静态内部类和枚举,分析了各自的优缺点。推荐使用静态内部类和枚举方式,因为它们既保证了线程安全,又实现了懒加载,同时讨论了单例模式的应用场景和重要性。
摘要由CSDN通过智能技术生成
所谓类的单例设计模式,就是 某个类在系统前后只能存在一个对象实例并且该类只提供一个取得其对象实例的静态方法

单例设计模式五种方式:

  • 1) 饿汉式(静态常量、线程安全)

构造器私有化 (防止 new ) 、 类的内部创建对象 、向外暴露一个静态的公共方法。 getInstance
核心代码:
优点:写法简单,在类装载时完成实例化,线程安全。
缺点:在类装载时完成实例化,没达到 Lazy Loading的效果。如果不使用它,则造成内存的浪费。
  • 2) 懒汉式(线程安全,同步方法)

构造器私有化 (防止 new ) 、 类的内部创建对象 、向外暴露一个静态的公共方法。getInstance   核心代码:

优点:线程安全,实现懒加载效果,需要时才实例化该对象。
缺点:加锁导致效率低。
  • 3) 双重检查(推荐使用)

构造器私有化 (防止 new ) 、 类的内部创建对象 、向外暴露一个静态的公共方法。getInstance   核心代码:

volatile可以将线程的工作内存变量实时刷新到主内存中,让其他线程实时看到变量的修改。

优点:线程安全,实现懒加载效果,需要时才实例化该对象。实例代码只执行一次,后面访问直接进入第一个if判断后就返回了,效率比上一个较高。

  • 4) 静态内部类(推荐使用)

构造器私有化 (防止 new ) 、 类的内部创建对象 、向外暴露一个静态的公共方法。getInstance   核心代码:

 优点:静态内部类在外部类被装载时是不会被装载的,只有在用到的时候才会被装载、被实例化,而且被装载和被实例化只会发生一次,所以利用静态属性,JVM帮我们保证了线程安全,同时也实现了懒加载效果,效率高。推荐使用。

  • 5) 枚举(推荐使用)

核心代码:

 优点:线程安全,防止反序列化重新创建新的对象。推荐使用。

反序列和反射对枚举不起作用,枚举天生线程安全。

 占用资源少,无需懒加载,使用枚举创建单例;

 占用资源多,需要懒加载,使用静态内部类创建单例;

1) 单例模式保证了 系统内存中该类只存在一个对象,节省了系统资源, 对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

2) 当想实例化一个单例类时,必须要记住使用相应的获取对象的方法,而不是使用new。

3) 单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或 耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库 或文件的对象(比如数据源、session工厂等)。

 笔者有心,请您留下星星!!!!!!!!!!!!!!!!!!!!!!!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值