签名:但行好事,莫问前程。
前言
记录一下单例模式的两种方法:饥汉模式和懒汉模式。
一、单例模式
单例模式:单例模式是一种常用的软件设计模式,其主要目的是确保一个类在整个系统中只有一个实例。
单例模式通过限制类的实例化来满足这一目的,并提供一个全局访问点来访问这个唯一的实例。这种模式在需要维护全局状态的系统或应用程序中非常有用,例如,在配置管理或数据访问中,单例模式可以确保只有一个对象负责访问和存储关键资源。
单例模式通常通过将构造函数设置为私有的,并提供一个静态方法来返回这个唯一的实例来实现。这可以防止其他代码实例化该类的多个对象,并提供一种统一的方式来访问这个实例。单例模式有两种常见的实现方式,分别是饿汉式和懒汉式。
二、饥汉模式实现单例
饿汉式单例:在类加载时立即创建实例
public class HungrySingleton {
// 类的构造器私有化
private HungrySingleton(){}
// 在内部类里面创建当前实例
private static HungrySingleton instance = new HungrySingleton();
// get方法来获取当前类的实例,必须是静态的
public static HungrySingleton getInstance() {
return instance;
}
}
优点:在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全。
缺点:类加载时就初始化,浪费内存。
三、懒汉模式实现单例
而懒汉式:在需要时才创建实例
public class LazySingleton {
// 构造方法私有化
private LazySingleton(){}
// 先不实例化对象
private static LazySingleton instance = null;
// get获取当前实例,必须是静态的,需要加锁保证线程安全
public static synchronized LazySingleton getInstance() {
if (instance == null) {
// 只在第一次调用的时候执行
instance = new LazySingleton();
}
return instance;
}
}
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
总结
博客主要记录了单例模式的两种方法:饥汉模式和懒汉模式,有啥错误或不足地方请指正,如果对你有所帮助,请一键三连。