设计模式也是面试中的热门考题,基本这个部分都是问问你知不知道XXX设计模式,有什么用,优缺点,然后再现场手写一个demo。很多时候是和spring一起考的,问问你知不知道spring框架用了哪些设计模式。今天我们来先看看单例模式。
什么是单例模式
单例模式是一种设计模式,用于确保类在应用程序中只有一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于那些需要全局状态或共享资源的情况,以确保整个应用程序中只有一个实例存在,从而避免不必要的资源消耗和冲突。例子,一个应用的日志记录器(Logger)。全局一个日志器记录即可,不需要多个。
单例模式的特点包括:
-
私有构造函数:单例类的构造函数被设为私有,以防止外部直接创建对象实例。
-
静态方法或静态变量:提供一个静态方法或静态变量来访问该类的唯一实例。
-
延迟实例化:有时单例对象不会在应用程序启动时立即创建,而是在第一次被请求时才进行实例化。
-
线程安全性:在多线程环境中,需要考虑单例对象的线程安全性,确保在并发情况下也能正确地返回唯一实例。
使用单例模式的优点包括:
- 节省资源:由于只有一个实例存在,可以避免创建多个对象所带来的资源浪费。
- 提供全局访问点:可以通过单例对象的全局访问点方便地获取到该实例,使得全局状态或共享资源的管理更加简单。
- 确保一致性:由于只有一个实例存在,可以确保整个应用程序中对该实例的状态保持一致。
然而,使用单例模式也可能带来一些缺点,如增加了代码的耦合性、对单例对象的依赖性过强等。因此,在使用单例模式时需要权衡利弊,并根据实际情况慎重考虑。
手写单例
可能这会需要你手写一个单例模式,单例模式有很多种写法,懒汉模式,饿汉模式,双重检查模式等。
懒汉模式
懒汉模式的懒就在于就是用的时候再去创建对象,否则什么都不做
public class LazySingleton {
// 私有静态变量,用于保存唯一的实例
private static LazySingleton instance;
// 私有构造函数,防止外部直接创建对象实例
private LazySingleton() {
// 初始化操作
}
// 公共静态方法,用于获取唯一的实例
public static LazySingleton getInstance() {
// 延迟实例化,