hadoopIO序列化工厂WritableFactorypublic interface Wr...

  作为工厂模式的WritableFactory,其抽象为一个接口,提供了具体的Writable对象创建实例的抽象方法newInstance(),代码如下:

public interface WritableFactory {
  /** Return a new instance. */
  Writable newInstance();
}

WritableFactories类类似于WritableComparator类利用HashMap注册记录着所有实现上述接口的WritableFactory的集合,与之不同的是WritableFactories是一个单例模式,所有的方法都是静态的。

关键代码:

   //提供了一个key=class,value=WritableFactory的注册表
      private static final HashMap<Class, WritableFactory> CLASS_TO_FACTORY =

    new HashMap<Class, WritableFactory>();

  public static Writable newInstance(Class<? extends Writable> c, Configuration conf) {

    WritableFactory factory = WritableFactories.getFactory(c);

    if (factory != null) {

//该方法的newInstanceof是调用了factory.newInstance()即你了实现的WritableFactory的newInstance()方法

      Writable result = factory.newInstance();

      if (result instanceof Configurable) {

        ((Configurable) result).setConf(conf);

      }

      return result;

    } else {

      return ReflectionUtils.newInstance(c, conf);

    }

  }

你可能感兴趣的:(hadoopIO序列化工厂WritableFactorypublic interface Wr...)