`

Java单例模式就该这么写

    博客分类:
  • Java
 
阅读更多

Java的单例模式实现方式一直是各路“大神”讨论的重点。
人们往往会去关注是否线程安全,是否支持懒加载,以前老版本Java的双检锁问题,volatile happen-before 问题,学究式的枚举类式实现。
我们真的需要了解这么多细节吗?
真的需要同时靠这么多trick来实现业务吗?
一门良好的编程语言不是应该让我们简单快乐地表达自己的目的吗?
编程语言不是应该为我们服务吗?难道要我们去伺候一门编程语言?
必须搞懂这么多trick才能称为“熟练”“精通”吗?
这么纠结于这些近乎为“语言糟粕”的特征是不是“孔乙己式”的行为?(茴香豆的茴字有几种写法?)

 

单例模式一种方式就够

作为Java的使用者,我们只需要知道这一种方法就行:

看看人家JDK自己是怎么实现的!!!

package java.lang;
public class Runtime {
  private static final Runtime currentRuntime = new Runtime();

  public static Runtime getRuntime() {
    return currentRuntime;
  }

  private Runtime() {}

  ...
}

 

杠精说这个实现不满足懒加载。
实际项目中需要懒加载的单例场景有多少?那就再来个“内部类式”的实现:

public class Singleton {
  private Singleton() {}
  public static Singleton getSingleton() {
    return Holder.singleton;
  }

  private static class Holder {
    private static final Singleton singleton = new Singleton();
  }
}

 

Spring 中 Bean 的单例实现方式

Spring中的Bean默认是单例的。这个效果不是上述通过改变类的实现来达到的。
上述单例模式的类无法被继承,因为子类无法调用父类的 private 构造函数。
Spring 采用 单例注册表 的方式来达到单例的效果(AbstractBeanFactory)。
可以简单地理解为,有一个 Map<Class<?>, Object> 存储每个目标类的唯一实例;通过类型信息获得相应的实例。

 

分享到:
评论

相关推荐

    java单例模式实例

    一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。

    Java 单例模式 懒汉模式

    Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象

    Java 单例模式.pptx

    作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 PPT详细了单例模式的实现和使用场景

    Java SE程序 单例模式

    Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...

    Java单例模式的全面总结

    Java单例模式,其中:单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种

    java单例模式的例子

    java单例模式的例子java单例模式的例子java单例模式的例子

    深入Java单例模式浅析

    Java设计模式-单例模式(懒汉和恶汉)

    JAVA单例模式的几种实现方法

    详细讲解了Java单例模式的几种实现方式,并有详细的示例配合讲解.

    java Singleton单例模式

    java Singleton单例模式 java Singleton单例模式

    Java 单例模式 工具类

    源码 博文链接:https://tianlihu.iteye.com/blog/747737

    java 获取 配置文件 属性 单例模式 高效加载

    通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...

    Java单例模式设计

    代码中演示了Java设计模式中的单例模式,其中包括饿汉单例模式,懒汉单例模式以及序列化饭序列化单例模式。在实际的开发中,可以直接借鉴使用。

    实用Java的单例模式,实用于Java学习者

    实用Java的单例模式,实用于Java学习者 单例模式 单例模式

    java单例模式

    java单例模式开发的7中写法,网上搜索的,可以看看

    java中的单例模式

    java 单例模式

    Java单例模式(DOC)

    Java单例模式Java单例模式Java单例模式Java单例模式

    单例模式java代码

    编写一个类LimitInstanceClass,该类最多可以实例化指定个数实例。实例的个数用配置文件InstanceLimit.cfg指定。例如,如果InstanceLimit.cfg的内容为2,...设置InstanceLimit.cfg的内容为3,写出你的程序的运行结果。

    Java设计模式之单例模式

    目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...

    java单例模式连接数据库源码

    java单例模式连接数据库源码.可以直接引用只需加入相应的mysql 或 oracle的驱动,修改源码的连接地址用户名及密码。

Global site tag (gtag.js) - Google Analytics