用静态工厂方法代替构造器
我们平时想获取类的一个实例,都是通过调用它的构造方法,也就是通过构造器实现。
但是还有一种方法。就是,类可以提供一个公有的静态工厂方法。
静态工厂方法,是类中的一个公有的静态方法,用来返回类的实例。
比如:
class People{
public static People newPeople(){
return new People();
}
}
或者
public class Person {
private final SEX sex;
private final String name;
private final int age;
private Person(String name, int age, SEX sex){
this.sex = sex;
this.name = name;
this.age = age;
}
public static Person getManInstance(String name, int age){ // 返回男性
return new Person(name, age, SEX.man);
}
public static Person getWomanInstance(String name, int age){ // 返回女性
return new Person(name, age, SEX.woman);
}
}
enum SEX{
man,
woman;
}
静态工厂方法的好处:
1.它们有名称
因为构造器的名字只能是类名。所以不能很确切的描述返回的对象。特别是当参数列表本身没有确切描述对象的时候。
但是静态工厂方法却可以通过提供不同的方法名,来做到确切的描述返回的对象。
而且,虽然一个类的构造器的方法签名不能重复,但是可以通过调换参数列表的顺序,来绕开这个限制。
但是这种方式很不好,很容易让人记不清到底该调用哪个。
2.不必在每次调用时都创建新的对象
调用构造器方法的话,每次调用都会创建一个新对象。
而静态工厂方法的话就不用每次调用都创建一个新对象。
public class Position{
private final int x;
private final int y;
private static Position ORIGIN = new Position(0,0);
private Position(int x, int y){
this.x = x;
this.y = y;
}
public static Position getORIGIN(){
return ORIGIN;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
3. 他们可以返回原返回类型的任何子类型的对象
怎么样才算静态工厂方法:
Java 静态工厂方法详解_TWW-CSDN博客_静态工厂方法
还在new对象吗?试试静态工厂方法--Effective Java第二章 - 颜小四的文章 - 知乎