之前看到一个面试题,静态工厂方法有什么优缺点,这个表示说不上来。。。 惭愧
所以单独开一篇介绍下静态工厂方法的特点,先看代码实现。这里举例了一个静态工厂方法的实现
public class Fruit { private String info; private static final Fruit APPLE=new Fruit("apple"); private static final Fruit ORIGIN=new Fruit("origin"); private static final Fruit PEAR=new PEAR(); public Fruit(){ } private Fruit(String info){ this.info=info; } public static Fruit getApple(){ return APPLE; } public static Fruit getOrigin(){ return ORIGIN; } public static Fruit getPear(){ return PEAR; } } class PEAR extends Fruit{ @Override public String toString() { return "Fruit-PEAR"; } }
先看一下有什么缺点:
1.static的静态工厂方法和普通的静态方法没什么明显区别;
2.在继承Fruit的时候,必须将Fruit的构造方法设置为public或protected,否则无法子类化; 可以将Fruit的public修改为private试下,编译器会报错;
再看下优点:
1.在调用的时候,可以直接根据函数名来调用,这样可以根据函数名来标识,提高可读性
2.在调用的时候,不需要每次new一个对象;定义final static的对象,每次直接返回static的实例;
3.可以看下这条定义private static final Fruit PEAR=new PEAR(); 返回的类型其实为Fruit的子类,及PEAR类的实例;即可以返回原返回类型的子类型;
4.代码看起来会比较简洁一些;