Java中建立和销毁对象(01)之建立对象-静态工厂方法

考虑用静态工厂方法代替构造器

Boolean类中,有这样一个方法:java

public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}
复制代码

这就是JDK用静态工厂方法代替构造器的一个使用。那么这样作有什么好处呢?框架

  1. 静态工厂方法有名称,能够明显区分出不一样构造方法的做用,构造器则体现不出来;
  2. 没必要在每次调用它时都建立一个新对象。在静态工厂方法中咱们能够手动控制建立对象的个数。
  3. 静态工厂方法能够返回原返回类型的任何子类型的对象。能够使返回的对象更加灵活。静态工厂方法构成了服务者提供框架(Service Provider Framework)的基础,例如JDBC API。服务者提供框架是指这样一个系统:多个服务提供者实现一个服务,系统为服务者提供者的客户端实现多个实现,并把他们从多个实现中解耦出来。
  4. 在建立参数化类型实例的时候,他们使代码变得更加简洁。
    一般咱们在构造Map时,会这样写:Map<String, List<String>> m = new HashMap<String, List<String>>();,虽然在JDK7以后能够简化为Map<String, List<String>> m = new HashMap<>();,但假设一下,若是HashMap提供了一个这样的静态工厂:
public static <K, V> HashMap<K, V> newInstance() {
  return HashMap<K, V>();
}
复制代码

那么在建立时就能够写为:Map<String, List<String>> m = HashMap.newInstance();ide

静态工厂方法并非没有任何缺点的:spa

  1. 类若是不含公有的或受保护的构造器,就不能被子类化。
  2. 静态工厂方法没法与其余的静态方法区分。若是命名不规范,很容易被误导。但咱们能够用一些规范的命名来弥补这一劣势,如 valueOfgetInstancenewInstancegetType 等。

总结:code

静态工厂方法和构造器各有优劣。一般静态工厂更合适,切忌第一反应就是提供公有的构造器,而不是优先考虑静态工厂。对象

参考

《Effective Java中文版 第2版》get

相关文章
相关标签/搜索