面试题:请解释Java中的设计模式,并举例说明单例模式(Singleton Pattern)的实现方式
Java中的设计模式
设计模式是在软件开发过程中针对特定场景而使用的通用解决方案。设计模式可以帮助开发者编写出更加清晰、灵活和可维护的代码。设计模式分为三大类:
- 创建型模式:用于对象的创建过程,如单例模式、工厂模式、建造者模式等。
- 结构型模式:用于处理类或对象的组合,如适配器模式、桥接模式、装饰器模式等。
- 行为型模式:用于处理对象之间的通信,如观察者模式、策略模式、命令模式等。
单例模式(Singleton Pattern)
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。
单例模式的实现方式
1. 饿汉式单例模式
饿汉式单例模式在类加载时就创建实例,适用于实例创建开销不大的情况。
public class Singleton {private static final Singleton INSTANCE = new Singleton();private Singleton() {}public static Singleton getInstance() {return INSTANCE;}
}
2. 懒汉式单例模式
懒汉式单例模式在第一次使用时才创建实例,适用于实例创建开销较大的情况。
public class Singleton {private static Singleton INSTANCE;private Singleton() {}public static synchronized Singleton getInstance() {if (INSTANCE == null) {INSTANCE = new Singleton();}return INSTANCE;}
}
3. 双重检查锁定单例模式
双重检查锁定单例模式通过两次检查实例是否为空来确保线程安全,并且只有在实例为空时才进行同步,提高了性能。
public class Singleton {private static volatile Singleton INSTANCE;private Singleton() {}public static Singleton getInstance() {if (INSTANCE == null) {synchronized (Singleton.class) {if (INSTANCE == null) {INSTANCE = new Singleton();}}}return INSTANCE;}
}
4. 静态内部类单例模式
静态内部类单例模式利用静态内部类的特性,在第一次使用时才加载静态内部类并创建实例,既实现了延迟加载,又保证了线程安全。
public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}
5. 枚举单例模式
枚举单例模式利用枚举的特性,确保实例的唯一性,并且提供了序列化机制,防止反序列化时创建多个实例。
public enum Singleton {INSTANCE;public void doSomething() {System.out.println("Singleton instance is doing something");}
}
单例模式的使用场景
单例模式适用于以下场景:
- 全局配置管理:如数据库连接池、日志记录器等。
- 缓存管理:如缓存实例、单例对象等。
- 资源管理:如文件操作、线程池等。