优点一:不像构造函数,它有具意的名称
因为可以取具意的名称,更容易明白如何使用,可读性也更好,
优点二:每次调用无需创建新的对象
优点三:允许返回子类对象
这些子类可以不为public ,这样可以打造出更加紧凑的API,虽然你有N种子类实现,这N种子类对于使用者来说是透明的,最终调用者拿到的是针对接口的对象,“interface-based framwork” == good practice;
缺点一:只有静态工厂方法而无构造函数无法被继承
缺点二:静态工厂方法不好和其他静态方法区分开来
两种策略来避免:
注释
使用静态工厂方法的常用名称
- valueOf : 返回和传入的参数值相同的实例对象
- of:valueOf的简写形式
- getInstance
- newInstance
总结:
通常静态工厂方法更具优势,所以不用静态工厂方法需要有充足的考虑才行。