优点:
1.与构造函数不同,静态工厂方法具有名字。这个好处可以帮助我们摆脱一个类只能有一个原型相同的构造函数的限制。
2.与构造函数不同,静态工厂方法每次被调用的时候,不要求非得创建一个新的对象(signleton模式)。
3.与构造函数不同,他们可以返回一个原返回类型的子类型对象(服务提供者框架的基础)。
缺点:
1. 类如果不含公有的或者受保护的构造函数,就不能被子类化。如果一个类没有公有的或者受保护的构造函数,那么这个类就不能被继承。比如:
public class TestObject {
private TestObject(){
System.out.println("new a TestObject!");
}
}
public class SubObject extends TestObject{ //编译报错,提示父类的构造函数是不可见的
}
2. 与其它静态方法没有任何区别。常用的静态工厂方法:valueof,getInstance