单例模式讲解案例

preview
共8个文件
java:2个
doc:2个
class:2个
需积分: 0 1 下载量 155 浏览量 更新于2019-01-17 收藏 11KB ZIP 举报
单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类在整个程序运行期间只有一个实例存在。这种模式常被用于管理共享资源,如数据库连接、线程池或者配置文件等,以减少系统资源的浪费并提高效率。 在Java、C#、Python等面向对象编程语言中,实现单例模式有多种方法。以下是一些常见的实现方式: 1. 饿汉式(静态常量):这是最简单的单例实现方式,它在类加载时就完成了初始化,所以是线程安全的。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 2. 饿汉式(静态代码块):与静态常量类似,但适用于类初始化时需要进行复杂操作的情况。 ```java public class Singleton { private static Singleton INSTANCE; static { INSTANCE = new Singleton(); } private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 3. 懒汉式(线程不安全):延迟初始化,只有在第一次调用getInstance()时才创建实例。但是这种方式在多线程环境下会出现多个实例。 ```java public class Singleton { private static Singleton INSTANCE; private Singleton() {} public static Singleton getInstance() { if (INSTANCE == null) { INSTANCE = new Singleton(); } return INSTANCE; } } ``` 4. 双重检查锁定(DCL,线程安全):解决了懒汉式的线程安全问题,同时避免了过多的同步开销。 ```java public class Singleton { private volatile static Singleton INSTANCE; private Singleton() {} public static Singleton getInstance() { if (INSTANCE == null) { synchronized (Singleton.class) { if (INSTANCE == null) { INSTANCE = new Singleton(); } } } return INSTANCE; } } ``` 5. 静态内部类:利用Java类加载机制保证线程安全,同时延迟初始化。 ```java public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonInstance.INSTANCE; } } ``` 6. 枚举型单例:JDK 1.5以后,推荐使用枚举实现单例,既简单又安全,还能防止反序列化重新创建新的实例。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { //... } } ``` 7. 非阻塞单例(基于AtomicReference):使用AtomicReference保证线程安全,同时保持高性能。 ```java import java.util.concurrent.atomic.AtomicReference; public class Singleton { private static final AtomicReference<Singleton> INSTANCE = new AtomicReference<>(); private Singleton() {} public static Singleton getInstance() { while (true) { Singleton current = INSTANCE.get(); if (current != null) { return current; } Singleton newInstance = new Singleton(); if (INSTANCE.compareAndSet(null, newInstance)) { return newInstance; } } } } ``` 以上就是单例模式的一些常见实现方式,每种方式都有其优缺点,需要根据具体的应用场景选择合适的方法。理解并熟练运用单例模式,对于优化程序结构、提高代码复用性以及资源管理等方面都有积极的意义。在实际开发中,合理使用单例模式可以有效提升软件的质量和性能。