创建和销毁对象—静态工厂方法VS构造器

2017-11-10  本文已影响17人  nico芊祤玖斓

首先给出结论:创建对象的时候考虑用静态工厂方法代替构造器

静态工厂方法:又叫简单工厂模式,与工厂模式不同,其是通过专门定义一个类来负责创建其他类的实例,其实例通常拥有共同父类,其普遍实现主要依靠Java的反射机制。
举个栗子,以BigInteger中的源码为例:
构造器:

//返回的可能为素数
 public BigInteger(int bitLength, int certainty, Random rnd) {
        BigInteger prime;

        if (bitLength < 2)
            throw new ArithmeticException("bitLength < 2");
        prime = (bitLength < SMALL_PRIME_THRESHOLD
                                ? smallPrime(bitLength, certainty, rnd)
                                : largePrime(bitLength, certainty, rnd));
        signum = 1;
        mag = prime.mag;
    }

静态工厂方法,总体功能跟上面的构造器差不多,就是certainty参数这里使用的默认值

//返回的可能为素数
public static BigInteger probablePrime(int bitLength, Random rnd) {
      if (bitLength < 2)
            throw new ArithmeticException("bitLength < 2");
        return (bitLength < SMALL_PRIME_THRESHOLD ?
                smallPrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd) :
                largePrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd));
    }
那为啥创建对象静态工厂方法好呢
 public class FoodFactory {
      public static Food getFood(String type) {
          Food food = null;
         try {
              food = (Food) Class.forName("info.zhw." + type).newInstance();
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }
  return food;
}
Map<String,List<String>> m = new HashMap<String,List<String>>;

对应的使用HashMap提供的静态工厂方法,你只要这么调用:

Map<String,List<String>> m = HashMap.new Instance();
//是不是代码短了很多

静态工厂方法的缺点

上一篇 下一篇

猜你喜欢

热点阅读