Source: geocoders/geocoderFabric.js

let YandexGeocoder = require('./address/yandex');
let GoogleGeocoder = require('./address/google');
let NominatimGeocoder = require('./address/nominatim');

/**
 * Класс GeocoderFabric - класс-фабрика, создающая геокодер необходимого типа
 */
class GeocoderFabric {
   /**
    * Создает экземпляр класса <geocoderType> Geocoder
    * @param {object} params - опции создания конкретного геокодера
    */
   constructor(params) {
      this.params = params;
       const dict = {
           "yandex": YandexGeocoder,
           "google": GoogleGeocoder,
           "nominatim": NominatimGeocoder
      };

      let geocoderType = params.geocoderType || "yandex";
      let concreteGeocoder = dict[geocoderType];
      this.geocoder = new concreteGeocoder(params);
   }

   getGeocoder() {
      return this.geocoder;
   }
}

module.exports = GeocoderFabric;