Java对象学习之创建对象——使用静态工厂方法代替构造器优点(四)

最近学习Android知识,发现Java好多的基础知识运用的真的很一般,所以决定在重新梳理一下,现在Kotlin也来了,在Android之路上,留给我看Java的时间不多了。

      静态我们就来简单介绍一下,使用静态工厂方法创建对象相较于构造器创建的对象的优缺点。主要概括如下:

优点:

  • 静态工厂方法有名称,可以明确的创建对应功能和属性的Java对象
  • 静态工厂方法可以预构建Java对象,实现在必要的情况下创建尽量少的对象实例
  • 静态工厂方法可以获取预构建Java对象的任何子类对象
  • 静态工厂方法在构建参数化实例的时候,代码更简洁

缺点:

  • Java类如果没有公有的或者受保护的构建器,就不能被子类化
  • 静态工厂方法和一般静态方法没有任何区别

静态工厂方法与构造器创建Java对象的对比已经介绍完了,下面就来针对优点当中的第四条结合代码说明一下。特别说明,今天介绍的是针对JDK1.6以及以下,高版本不存在今天介绍的问题了。还有就是没有介绍优点三直接介绍优点四是因为第三条有点难,需要好好理解一下。

1,静态工厂方法可以在构建参数化实例的时候使代码更简洁

这里说到我们的参数化实例不得不提到我们的集合框架了,比如我们创建一个Map对象:

HashMap<String,String> map=new HashMap<String,String>();

当然了,这是jdk1.6以及之前的,在1.7以及以上版本,我们就可以写成:

HashMap<String,String> map=new HashMap<>();

我们可以看出在1.6以及更低版本,我们在定义这样参数化实例对象的时候写了很多重复的代码,可能这个示例看不出来,那我再举一个例子你就明白啦:

HashMap<String, HashMap<String, ArrayList<LinkedList<TreeMap<HashMap<String, TreeSet<Integer>>, ArrayList<String[]>>>>>> map =
        new HashMap<String, HashMap<String, ArrayList<LinkedList<TreeMap<HashMap<String, TreeSet<Integer>>, ArrayList<String[]>>>>>>();

这样一个例子是不是觉得这种方式构建参数化示例优点代码冗余了。所以我们只需要通过静态工厂方法就可以解决这个问题:

public static <K,V>  HashMap<K,V> getSelfHashMap(){

    return new HashMap<K,V>();

}

这样,我只需要通过如下方式就可以获取实例了,代码要相对简洁不少:

HashMap<String,HashMap<String,ArrayList<LinkedList<TreeMap<HashMap<String,TreeSet<Integer>>,ArrayList<String[]>>>>>> m1
        =getSelfHashMap();

正因为这种方式的优点,所以在1.7以及更高版本的JDK中我们就不用想上面那样写过多冗余的代码了。这部分由于版本问题,现在意义不大。

猜你喜欢

转载自blog.csdn.net/hfut_why/article/details/82729703