文
章
目
录
章
目
录
Java面试题:说一下单例模式,请你手写Java单例模式
得分点:
饿汉式单例模式、懒汉式单例模式、线程安全的懒汉式单例模式
标准回答:
单例模式(Singleton Pattern)是创建型设计模式的一种,其主要特点是确保一个类只有一个实例存在。单例模式的核心思想是将类的构造函数私有化,以防止外部直接创建对象实例。
在Java中,通常有两种常见的单例模式表现形式:
饿汉式单例模式:
在类被加载时就会初始化静态变量instance,并在类的私有构造函数中创建唯一的实例。
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
懒汉式单例模式:
在第一次引用类时才进行对象实例化,通过一个公有的静态方法获取对象实例。但这种方式可能存在线程安全问题。
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
对于懒汉式单例模式,如果多个线程同时调用getInstance()
方法,可能会导致多个实例被创建,违反了单例模式的原则。为了解决这个问题,可以使用synchronized
关键字对getInstance()
方法进行同步,实现线程安全的懒汉式单例模式:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
加分回答:
此外,了解单例模式的优点和缺点也是一个加分项。单例模式的优点包括:
- 在需要频繁创建和销毁对象时,可以提高性能。
- 可以节省系统资源,如读取配置、创建依赖对象。
- 可以避免对共享资源的多重占用,保证数据一致性。
- 可以作为系统全局访问点,优化共享资源访问。
单例模式的缺点包括:
- 不容易扩展,不支持子类化,可能需要修改现有代码。
- 不利于测试,因为难以替代单例实例进行测试。
- 可能与单一职责原则冲突,一个类应该只负责一个逻辑,而单例模式可能包含多个职责。
- 了解这些优点和缺点可以展示您对单例模式的深入理解和对设计模式在实际开发中的应用考虑。