首页 > 编程开发 > Java编程 > Java单例模式的推荐写法及另类写法
2016
07-12

Java单例模式的推荐写法及另类写法

Java 单例模式分为懒汉式和饿汉式,而日常使用又以懒汉式较多。

下面是一种线程安全的懒汉式单例模式的写法:

遗憾的是该写法的效率很低,然后有人提出了DCL(Double Check Lock)来实现单例模式,即双重判断加锁:

它的优点是既能在需要的时候才初始化单例,又能保证线程安全,而且单例对象初始化后再调用方法不会再进行同步锁。

但是它也有缺点,第一次加载时反应较慢,也可能由于Java内存模型的原因偶尔会失败,在高并发环境下也有一定的缺陷,虽然发生的概率很小。

下面的方法是比较推荐的单例实现:

没错,就是通过静态内部类实现的单例模式。

当第一次加载 Singleton 类时并不会初始化 instance ,只有在第一次调用 getInstance 方法时才会加载 SingletonHolder 类并初始化 instance。这种方法不仅能确保线程安全,也能够保证对象的唯一性,同时也延迟了单例的实例化,所以这是推荐的单例模式实现方式。

下面还有一种比较另类的单例实现方式,那就是使用枚举,但是由于实在是太过另类,现实开发中使用得并不多。

使用的时候,只需要:

使用容器实现单例模式:

这种方案比上一种方案还要另类,在程序的初始阶段,将多种单例对象放入到一个统一的管理类中,在使用的时候根据 key 来获取单例对象。这种方式使我们可以管理多种类型的单例,并且在使用时可以通过统一的接口进行获取操作,降低了用户的使用成本,也对用户隐藏了具体的实现,降低了耦合度。

最后编辑:
作者:
百度ID:“度娘程序员”,博主。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

Java单例模式的推荐写法及另类写法》有 1 条评论

  1. Sogou ExplorerSogou ExplorerWindows 7Windows 7

    您的博客拥有旺盛的生命力!!

发表回复

你的邮箱地址不会被公开,垃圾评论将被删除。

有人回复时邮件通知我