这里所说的静态工厂方法就是返回类型实例的静态方法。
那么为什么不使用构造器呢?用构造器方式构造实例不是我们一直约定好的吗?
嘿嘿 主要原因还是我们的构造器方法规定的太多限制了我们程序的灵活性:
构造器规定一:构造器只能本类实例,不能返回子类实例对吧。
构造器规定二:构造器一出现就必会创建一个实例。
相比静态工厂方法就没那么多规定了
"我"可以创建对象还可以不创建对象(直接从内存中拿一个曾经创建好的对象)------>对应构造器规定二
"我"可以通过参数返回任何子类型的实例--------->对应构造器规定一
public class StaticFactoryMethodClass {
/**
* 这是静态工厂方法
*
* @param type
* @return
*/
public StaticFactoryMethodClass newIntefanceByType(String type) {
if (type.equals("SubA")) {
return new SubA();
}
if (type.equals("SubB")) {
return new SubB();
} else
return new StaticFactoryMethodClass();
}
}
public class SubA extends StaticFactoryMethodClass{
}
public class SubB extends StaticFactoryMethodClass{
}
感觉上边的代码虽然可以说明返回类型可以为任何子类型 但是中代码很垃圾若是另一个类继承了 StaticFactoryMethodClass
还得写一个if判断 扩展性不好!---谁有更好的例子
静态工厂方法那么多优势甚至可以完全替代构造器了 干嘛还要构造器 用私有构造器隐藏了只用静态工厂方法实例对象多好
当你隐藏构造器的时候有没有想过这个类就不能被继承了
如上边
StaticFactoryMethodClass
这个类的构造函数为private
那么SubA和SubB继承的时候就会报错