静态方法,我们经常使用大部分是因为它可以在不去实例化一个类的前提下,调用类中的我们所需要的方法。下面我们将深入讨论下和创建对象相比较而言使用静态方法的好处。
1 推荐使用静态方法创建实例,由于静态方法是可以自己命名的,这个权利,让我们可以根据我们的实际用途,取通俗易通的名字,这样有利于代码的可读性。例如:获取当前环境存在对象 fetchCurrEnvObj()
获取明天的机票存在情况aquireAirTicOfTomm()
等等。
2 相比较于直接使用constructor 创建对象而言,使用静态方法创建对象可能更为我们的可控性,更强,我们可以返回当前类的子类等,根据实际情况进行处理,而不用每次都返回同样的实例化的对象,从而浪费资源。
3 减少生成实例过程中冗长的参数 例如 如果我们需要创建一个
Map<List<String,Map<String,Object>>> map = new HashMap<List<String,Map<String,Object>>>();
这样的代码写着十分的难受,但是如果HashMap提供一种类似于这样的生成实例的方法,
public <T,K> HashMap<T,K> newInstance(){
return new HashMap<T,K>;
}
这样的代码让编译器自己去决定类型。是不是十分的爽快,其实很多关于泛型的类型传递都是可以让编译器帮我们去处理类型,从而让代码更佳的灵活。
说完了优点,下面说一下使用静态方法的缺点是什么呢?
1 最大的缺点,也是最常见的就是,我们使用静态方法的时候,通常是去构造器的,这样导致我们的类不能够被继承,而只能被注入,当然说到这个地方,这个也是有些争议性的,应为在设计模式中有一个设计原则就是Favor composition than implementation
2 第二个缺点在于,静态方法,不如构造器生成对象那么深入人心,机会所有的编程人员都知道 new Object
所以如果是静态的方法,而使用人又不太熟悉这个API的话,就可能不知道如何生成对象。所以在这点上我们需要进行对我们的命名进行规范,我们都知道,如果是生成实例的静态方法,我们的方法名可定义为getInstance getType valueOf newInstance
这之类的。
总结:
我们在创建类的时候不要想当然的就给这个类给一个公开的共有的构造器,在弄清楚这个类的目的后,我们应当首先考虑的是能否给一个静态方法,而不是创建对象。