1. 什么是单例模式?
定义: 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一种全局访问点以访问该实例。常见的场景包括身份证号码、政府等需要唯一实例的情况。
单例模式通常用于那些需要在应用程序中仅存在一个实例的情况,例如配置管理器、线程池、数据库连接池等。通过使用单例模式,可以确保该类的唯一实例在整个应用程序中被共享和使用。
关键元素:
- 私有的构造函数,以防止类的直接实例化。
- 私有的静态成员变量,用于存储类的唯一实例。
- 一个公共的静态方法,用于返回类的唯一实例。该方法负责创建实例(如果尚未创建)并返回该实例的引用。
2. 饿汉式与懒汉式区别
-
初始化时机不同:
- 饿汉式: 类加载时立即初始化并创建单例对象。
- 懒汉式: 第一次使用时才会初始化并创建单例对象。
-
线程安全性不同:
- 饿汉式: 类加载时创建单例对象,天生线程安全。
- 懒汉式: 第一次使用时创建单例对象,需要同步控制来保证线程安全。
-
内存占用不同:
- 饿汉式: 类加载时创建单例对象,占用内存较多。
- 懒汉式: 第一次使用时创建单例对象,占用内存相对较少。
饿汉式代码示例:
public class Singleton_01 {private byte[] data1 = new byte[1024*1024];private byte[] data2 = new byte[1024*1024];private byte[] data3 = new byte[1024*1024];private Singleton_01() { }private static Singleton_01 instance = new Singleton_01();public static