【0005】JDK源码分析之静态工厂方法使用

【0005】JDK源码分析之静态工厂方法使用

本文将介绍java.lang包下的Boolean类,以及其使用的静态工厂方法。

本文大纲:

       一、Boolean类介绍

       二、何为静态工厂方法?

       三、静态工厂方法的优缺点

       四、静态工厂方法的应用案例


一、Boolean类介绍

Boolean类是原生boolean类型的包装类。Boolean类提供了很多便利的操作布尔值的方法,其中包括静态工厂方法创建实例。下图是Boolean类对外开放的API,图标解释:F-final,S-static,C-constructor。在Eclipse IDE里面打开Boolean类源码,按F4就可以看到这个结构图。

【0005】JDK源码分析之静态工厂方法使用

二、何为静态工厂方法?

创建实例有两种常用方式,一种是通过构造器,另一种是通过静态工厂方法。静态工厂方法大概是这种形式:public static 实例类型 方法名(参数)。比如Boolean中的静态工厂有valueOf()方法,代码如下:

【0005】JDK源码分析之静态工厂方法使用

Boolean类中缓存了两个实例,一个是TRUE,另一个是FALSE。当使用valueOf静态工厂方法创建实例时,返回的都是这两个实例之一,节省了空间与资源。如果是使用构造器,则会创建不同的对象实例,相对消耗更多的资源。这也是使用静态工厂方法的一个好处之一,可以使用缓存的对象实例,减少频繁创建对象。


三、静态工厂方法的优缺点

为了更准确的描述静态工厂方法的优缺点,引用《Effective Java》一书的定义,该书包含了很多实用编程技巧。

优点:

1、静态工厂方法与构造器不同的第一大优势在于,它们有名称。构造器是通过参数来判断构造了具有什么属性和行为的对象,而工厂方法则可以通过方法名来判断,更加易于阅读。

2、静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。BooleanvalueOf方法返回的就是缓存对象,不用重复创建对象。

3、静态工厂方法与构造器不同的第三大优势在于,可以返回原返回类型的子类型的任意对象。如此一来,在创建对象时提供了更多的便利性。

4、静态工厂方法的第四大优势在于,在创建参数化类型实例的时候,更加简洁。

缺点:

1、与其他的静态方法没有区别,不能明显知道哪些是创建实例的静态工厂方法,需要查看API。但是一般静态的工厂方法都遵守一定命名规则,如:getInstancenewInstancenewTypegetTypecreate等。

2、类如果不含有共有的或受保护的构造器,不能被实例化。


四、静态工厂方法的应用案例

Boolean类的实现,是一个很好的案例。其次,我也提供一个案例,代码如下:

【0005】JDK源码分析之静态工厂方法使用

五、总结

本文以Boolean为入口引出静态工厂方法,描述了静态工厂方法的优缺点,同时也提供了两个案例,一个是JDK中的Boolean类,一个是本人写的小案例。前者应用了静态工厂方法的第二个优势,后者应用了静态工厂方法的第三个优势。

始发于微信公众号: Java框架源码分析

评论:

1 条评论,访客:1 条,站长:0 条
  1. staunch
    staunch发布于: 

    第二个案例不是每次都new了吗?

发表评论