这里的静态工厂方法并不是设计模式中的工厂方法,只是类中的一个静态方法,这个方法的主要作用就是通过调用类的构造器来返回类的实例。
这样做有以下几个优势:
第一大优势:它们有名称
如果希望一个类能通过不同的参数来实例化,那么用公有构造器只能通过构造器的重载来实现,这样在实例化的时候就需要谨慎仔细的鉴别输入参数。如果使用静态工厂方法的话,就可以在方法名称上加以区分,方便使用。
public class A{
private Stirng a;
private A(String a){this.a=a;}
public static A getInstance(String a){return new A(a);}
}
第二大优势:不必在每次调用它们的时候都创建新对象
这要根据具体的需求来实现,比如在单例模式中,调用静态工厂方法时,如果该对象已经存在则返回该对象的引用,如果该对象不存在则创建对象实例并返回。
public class Singleton{
private static Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if(singleton==null){singleton=new Singleton();}
return singleton;
}
}
第三大优势:他们可以返回原返回类型的任何子类对象
这个可以理解为父类类型指向子类对象,这种灵活性的一个应用就是:API可以返回对象,同时有不会使对象的类型变成公有的,隐藏了实现类可以让API变得非