为什么用静态工厂方法代替构造方法
静态工厂方法就是通过类的静态方法返回一个实例。下面是一段示例代码:
- 通过构造方法创建
BigInteger prime = new BigInteger(int, int, Random)
- 通过静态工厂方法创建
BigInteger prime = BigInteger.probablePrime()
如上述示例代码对比:
- 使用构造方法只能通过参数数量或类型不同来进行构造,可读写差,容易传错参数,如果不阅读文档不知道这些构造函数代码做了什么。静态工厂方法有更好的命名可读性,可以见名知意,调用端也更容易记忆。
- 通过使用静态工厂方法可以不用每次调用创建新的实例。可以控制创建对象的数量。提升性能
- 使用静态工厂方法可以灵活返回类的子类型对象实例。(隐藏背后的实现, 可以根据传参返回合适的实现来提升性能等)
- 静态工厂方法返回的类型可以是不存在的,如JDBC的DriverManager,是通过类似SPI的机制来返回具体的提供者实现。
- 构造方法比静态工厂方法更容易程序员注意, 所以可以在命名静态工厂方法可以采取一些公共的,常用的名字来命名。 以及编写相关javadoc增加程序员使用的注意力。
- 使用静态工厂方法不提供构造方法时,没法子类化。 这里静态方法更倾向于组合而不是继承。