单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。
懒汉模式和饿汉模式都是单例模式的实现方式,它们的区别在于实例化的时机不同。
饿汉模式是指在类加载时就已经创建了实例,并且在类内部提供一个静态的访问方法,通过这个方法返回单例对象。在使用时,不需要判断是否已经创建了实例,直接调用该方法即可。
懒汉模式是指在调用获取单例对象的方法时才会创建实例,而不是在类加载时就创建实例。这种方式可以节省系统资源,但是需要注意线程安全的问题,需要考虑并发访问时可能会创建多个实例的情况。
下面是两种模式的代码示例:
饿汉模式:
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
懒汉模式:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
可以看到,饿汉模式在类加载时就创建了实例,因此不存在线程安全的问题;而懒汉模式需要在方法内部判断是否已经创建了实例,需要使用synchronized关键字保证线程安全。