Java单例模式(饿汉式+懒汉式)
单例模式:
所谓的单例模式,就是类只有(只产生)一个对象,外部要使用该类的对象,通过调用一个类方法实现
特点:
- 单例类只能有一个实例
- 单例类必须自己创建自己的为一实列
- 单例类必须给所有其他对象提供一实例
要点:
- 某个类只能有一个实例
- 必须自行创建实例
- 必须自行向整个系统提供这个实例
实现:
- 只提供私有的构造方法
- 含有一个该类的静态私有的对象
- 提供一个静态的公有方法用于创建、获取静态私有对象
保证只执行一次 可以利用本构造器构建一个对象,保证方法永远只对外输出构建好的对象
再这边调用的时候是可以通过对象和类名对该属性值进行修改 安全性不高
添加private阻止该属性被修改
饿汉式单例模式:
特点在于:早早准备好该类的对象,以便于对外提供!生成速度较快,但是长期占用一个内存空间
以空间换时间
懒汉式单例模式(饱汉式单例模式)
构建静态属性时不去实例化,保证该静态属性不会占用内存空间
当要使用该类的对象时,才去生成唯一的对象。
以时间换空间
因为饿汉模式的话事先创建好了对象太占用内存空间了 改为null就不再占用黁村空间
使用if判断当对象等于null时势必会进行判断然后赋值出新的对象值
然后直接return出instance
单例模式小结
优点:
- 再内存中只有一个对象,节省内存空间
- 避免频繁的创建销毁对象,提高性能
- 避免对共享资源的多重占用
缺点:
- 扩展比较困难
- 如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失
使用场景:
- 创建对象时占用个资源过多,但同时又需要用到该类对象
- 对系统内资源要求同意读写,如读写配置信息
- 当多个实例存在可能引起程序逻辑错误,如号码生成器