为了让客户端获取它自身的一个实例,最传统的就是提供一个公有的构造器。
静态工程方法优势:
1.静态工厂方法与构造器不同的优势在于,静态工厂方法有名字。
class Person{
int age = 10;
int weight = 30;
public static Person newPerson(int age, int weight) {
Person person= new Person();
person.weight = weight;
person.age = age;
return person;
}
public static Person newPersonWithWeight(int weight) {
Person person= new Person ();
person.weight = weight;
return person;
}
public static Person newPersonWithAge(int age) {
Person person= new Person ();
person.age = age;
return person;
}
}
当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器。
2.不必每次调用时都创建一个新对象。
3.可以返回原返回类型的任何子类型的对象。
class Person{
publick static Person getInstance()
{
return new Person();
//获取返回 new Man(); new WoMan();
}
}
Class Man extends Person{
}
Class WoMan extends Person{
}
api可以返回对象,同时又不会使对象的类变成公有的。
4.所返回的对象的类可以随着每次调用而发生改变,这取决于静态工程方法的参数值。
5.方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在。
静态工厂方法缺点:
1.类如果不含公有的或者受保护的构造器,就不能被子类化。