Factory method

by Artem

Babel + JSX

'use strict';

class JavaDeveloper {
  language = 'java';
  static displayName = 'JavaDeveloper';
  writeCode() {
    console.log(`${JavaDeveloper.displayName} writes ${this.language} code...`);
  }
}

class CppDeveloper {
  language = 'c++';
  static displayName = 'CppDeveloper';
  writeCode() {
    console.log(`${CppDeveloper.displayName} writes ${this.language} code...`);
  }
}


class JavaDeveloperFactory {
  createDeveloper() {
    return new JavaDeveloper();
  }
}

class CppDeveloperFactory {
  createDeveloper() {
    return new CppDeveloper();
  }
}


function createDeveloperFactoryBySpeciality(speciality) {
  switch (speciality) {
    case 'java':
      return new JavaDeveloperFactory();
    case 'c++':
      return new CppDeveloperFactory();
    default:
      throw new TypeError(`Speciality ${speciality} in undefined.`);
  }
}


// usage
const developerFactory = createDeveloperFactoryBySpeciality('java');
const developer = developerFactory.createDeveloper();
developer.writeCode();