单例模式的实现方法

核心提示单例模式的实现方式有以下几种:懒汉式单例模式;线程安全的懒汉式单例模式;双重检测锁实现单例模式;饿汉式单例模式;静态内部类实现单例模式;枚举实现单例模式。具体介绍如下:懒汉式单例模式懒汉式单例模式,即是在需要用到该对象的时候才去进行初始化线

单一模式可以通过以下方式实现:

懒惰的单例模式;线程安全的懒惰单例模式:双检测锁实现单例模式;饥饿的独生子女模式;静态类实现单例模式;枚举单例模式。

详情如下:

懒惰单例模式

惰性单例模式,即对象只在需要使用时才初始化。

线程安全的懒惰单例模式

为了确保线程安全,我们可以锁定getInstance方法:

这样确实可以保证多线程情况下的线程安全,但是这样一来,每次调用getInstance方法获取实例对象时,都会进行锁操作,会造成比较大的开销。事实上,只有在初始化实例对象时才需要锁。

双检测锁实现单例模式

我们将锁定位置后移,在检查变量是否已初始化时不锁定,只在变量未初始化需要初始化时锁定;这样,就不需要锁定getinstance方法或获取实例对象,从而降低了性能消耗。

饥饿的单身模式

饥饿单例模式是在加载类时创建并初始化单例对象。其代码如下:

静态类实现单例模式。

使用静态内部类利用了Java静态内部类的特性:当Java加载外部类时,它不会创建内部类的实例,而只是在外部类使用内部类时才创建。其代码如下:

枚举单一模式

使用枚举实现单例模式利用了枚举的特性:全局唯一性。其代码如下:

什么是单一案例?

在实例化一个单例类之后,您在堆中获得相同的实例对象。通俗点说,这个singleton的所有实例化引用都指向堆内存中的一个实例对象。

使用场景:对象需要频繁实例化和销毁。这时候考虑使用单例可以大大提升性能。

优势:

因为只有一个实例对象,所以占用的内存很少。

对象不必重复new,这当然解放了资源的重复占用,提高了性能。

缺点:

扩展性差,每次想扩展都要改代码。

的使用场景比较单调。如果是多个场景下不断变化的实例对象,最好不要用单个实例,数据容易出问题。

最好不要使用连接池。n多个对象共享一个连接池,容易导致连接池溢出。

 
友情链接
鄂ICP备19019357号-22