Java单例模式(饿汉式+懒汉式)

单例模式:

所谓的单例模式,就是类只有(只产生)一个对象,外部要使用该类的对象,通过调用一个类方法实现

 

特点:

  1. 单例类只能有一个实例
  2. 单例类必须自己创建自己的为一实列
  3. 单例类必须给所有其他对象提供一实例

 

要点:

  1. 某个类只能有一个实例
  2. 必须自行创建实例
  3. 必须自行向整个系统提供这个实例

 

实现:

  1. 只提供私有的构造方法
  2. 含有一个该类的静态私有的对象
  3. 提供一个静态的公有方法用于创建、获取静态私有对象

 

Java单例模式(饿汉式+懒汉式)

保证只执行一次 可以利用本构造器构建一个对象,保证方法永远只对外输出构建好的对象

 

Java单例模式(饿汉式+懒汉式)

再这边调用的时候是可以通过对象和类名对该属性值进行修改  安全性不高

 

Java单例模式(饿汉式+懒汉式)

添加private阻止该属性被修改

 

 

饿汉式单例模式:

特点在于:早早准备好该类的对象,以便于对外提供!生成速度较快,但是长期占用一个内存空间

以空间换时间

Java单例模式(饿汉式+懒汉式)

 

 

懒汉式单例模式(饱汉式单例模式)

构建静态属性时不去实例化,保证该静态属性不会占用内存空间

当要使用该类的对象时,才去生成唯一的对象。

以时间换空间

Java单例模式(饿汉式+懒汉式)

因为饿汉模式的话事先创建好了对象太占用内存空间了  改为null就不再占用黁村空间

 

Java单例模式(饿汉式+懒汉式)

使用if判断当对象等于null时势必会进行判断然后赋值出新的对象值

然后直接return出instance

Java单例模式(饿汉式+懒汉式)

 

单例模式小结

优点:

  1. 再内存中只有一个对象,节省内存空间
  2. 避免频繁的创建销毁对象,提高性能
  3. 避免对共享资源的多重占用

 

缺点:

  1. 扩展比较困难
  2. 如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失

 

使用场景:

  1. 创建对象时占用个资源过多,但同时又需要用到该类对象
  2. 对系统内资源要求同意读写,如读写配置信息
  3. 当多个实例存在可能引起程序逻辑错误,如号码生成器