在软件开发中,单例模式和多例模式是两种常见的对象创建模式,它们在控制对象实例的数量、提高资源利用率以及确保全局访问一致性方面发挥着重要作用。本文将深入探讨单例与多例成员的巧妙注入艺术,分析其原理、实现方式以及在项目中的应用。
单例模式
原理
单例模式确保一个类仅有一个实例,并提供一个全局访问点。其核心思想是控制对象的创建,防止多次实例化。
实现方式
饿汉式:在类加载时就初始化一个实例,并向外部提供这个实例。
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; } }双重校验锁:懒汉式的一种改进,减少同步代码块的使用。
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; } }
应用
单例模式适用于以下场景:
- 系统中只需要一个实例,如数据库连接池、配置文件读取器等。
- 需要全局访问点,如日志记录器、线程池等。
多例模式
原理
多例模式与单例模式类似,但允许创建多个实例,每个实例都是独立的。它通过维护一个实例列表来实现。
实现方式
枚举:使用枚举实现多例模式,确保实例的唯一性和不可变性。
public enum MultiSingleton { INSTANCE1, INSTANCE2, INSTANCE3; public void doSomething() { // 业务逻辑 } }工厂方法:通过工厂方法创建多个实例,并维护实例列表。
public class MultiSingletonFactory { private static List<MultiSingleton> instances = new ArrayList<>(); public static MultiSingleton createInstance(int index) { if (index < instances.size()) { return instances.get(index); } else { MultiSingleton instance = new MultiSingleton(); instances.add(instance); return instance; } } }
应用
多例模式适用于以下场景:
- 系统中需要多个实例,但实例数量有限,如数据库连接池、缓存等。
- 需要控制实例数量,避免资源浪费。
总结
单例与多例模式在软件开发中具有广泛的应用,它们通过控制对象实例的数量,提高资源利用率,并确保全局访问一致性。在实际项目中,我们需要根据具体需求选择合适的模式,以达到最佳效果。
