单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式属于创建型模式,它提供了一种控制对象创建过程的方式。

作用:

单例模式用于解决以下问题:

  1. 全局访问点:单例模式提供一个全局访问点供外部访问唯一的实例,这对于协调系统整体的操作很有帮助。
  2. 控制资源的使用:通过确保只有一个实例,单例可以控制对共享资源的访问,例如,连接池或配置管理器通常设计为单例。
  3. 节省系统资源:创建对象通常需要占用系统资源的时间和空间。如果一个对象的实例只需要一个,那么重复创建相同的对象就是资源的浪费。单例模式就可以避免这种浪费。
  4. 数据共享:单例模式通常用于在不同的系统组件间共享数据,整个应用程序的不同部分可以方便地访问单例类的数据。
  5. 控制实例的数量:单例模式严格控制一个类的实例数据,确保系统中绝对不会有多个实例。

实现单例模式的关键点:

  1. 私有构造函数:为了防止外部通过 new 创建多个实例,单例类的构造函数应该是私有的。
  2. 提供一个获取实例的方法:通常是一个公有的静态方法,如 getInstance(),用于返回单例类的唯一实例
  3. 确保线程安全:在多线程环境下,需要确保类的实例化过程是线程安全的。
  4. 延迟初始化:单例实例不是在类加载就立即创建,而是在首次使用时创建,这称为延迟初始化。
  5. 防止实例被克隆:如果单例类实现了 Cloneable 接口,需要重新 clone() 方法,防止通过克隆创建新的实例。
  6. 序列化与反序列化保护:如果单例类实现了Serializable接口,需要考虑反序列化时不会创建新的实例。

实现方式:

  1. 饿汉式:在类加载时就创建类的实例,简单但不提供延迟初始化。