需要知道的是,静态工厂方式就是一个静态方法,用来返回当前类型或者是子类的一个方法而已。
书上说相比构造器而已有几点优势:
其一: 这个方法可以根据业务定义自己更能够理解的方法名字出来。 比如: getInstance这样的比较常见的名字。
其二: 相比构造器,每次调用的时候,不必都创建一个实例对象出来。 这个也就是说,我们可以直接通过进行单例模式。
其三: 这个方法可以返还自己的实例或者是自己的子类,或者,通过不同的参数,实例不同的对象。 这样的话,更加的灵活。 如下面代码:
<span style="font-size:14px;">package com.stu;
public interface Animal {
public void eat();
}</span>
<span style="font-size:14px;">package com.stu;
public class Cat implements Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
</span>
<span style="font-size:14px;">package com.stu;
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
</span>
<span style="font-size:14px;">package com.stu;
public class Main {
public static Animal getType(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class<?> cl = Class.forName(type);
Animal animal = (Animal)cl.newInstance();
return animal;
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Animal animal = Main.getType("com.stu.Cat");
animal.eat();
}
}</span>
从上面可以看出, 可以灵活的返还自己的子类或者接口类, 更加的灵活。
缺点就是
其一: 这种形式的创建, 类的构造器是公开或者是受保护的。 因为大家知道, 私有的构造器是不能在类外面进行创建,那就更加不能继承了。
其二: 他这个其实和静态方法没有任何的区别。 哈哈。