java设计模式之单例模式
单例模式是java设计模式中的一种常用的创建型模式,是我们日常开发中最常使用的一种设计模式。它的主要作用是保证系统中一个类只有一个实例。单例模式可以被用来封装一些工具类,例如数据库连接等。
单例模式的定义是:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
单例模式有多种实现方式,以下是其中的四种:
1. 饿汉单例模式
饿汉单例模式顾名思义“饿汉”,代表急着“吃饭”(这里的饭应该是指的实例对象),所以很早就创建出来。在类加载的时候就已经实例化了(只创建唯一的实例),所以不存在线程上的一些问题。但是,也因为如此如果有太多的单例,且这些实例不经常使用那么久会造成对内存的浪费。
2. 懒汉单例模式
懒汉模式的定义是:只有当用到对象的时候才会去创建对象,来节省空间。懒汉模式有多种实现方式,以下是其中的三种:
懒汉模式V1:
这种方法虽然节省空间,但是它是线程不安全的。因为:当有多个线程同时调用这个方法时,因为同时判断实例为空,所以会创建很多个实例,这不符合单例模式的设计理念(一个类只有一个实例对象)。
懒汉模式V2:
为了解决线程不安全的问题,我们可以在getInstance方法之前加上synchronized进行同步,但是这样就会使得每次需要目标实例的时候都要排队等待,假设有很多线程都在调用这个getInstance方法,那么就会陷入很长时间的等待,大大降低的程序的效率。
懒汉模式V3:
为了解决上述问题,我们可以使用双重锁定机制来实现懒汉模式。这个方法可以使得getInstance方法只要执行一次实例化操作,就可以避免了每次getInstance方法都需要同步的缺点。
3. IoDH单例模式
IoDH单例模式是使用容器来维护单例的实例,通过容器来获取单例对象。
4. 枚举单例模式
枚举单例模式是使用枚举类型来实现单例模式,枚举类型天生就是单例的。
单例模式是java设计模式中的一种常用的创建型模式,它可以保证系统中一个类只有一个实例。不同的实现方式都有其优缺,开发者可以根据实际情况选择合适的实现方式。