Abstract Factory

by Artem

Babel + JSX

'use strict';

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

class ManualTester {
  static displayName = 'ManualTester';
  testCode() {
    console.log(`${ManualTester.displayName} tests code...`);
  }
}

class ProjectManager {
  static displayName = 'ProjectManager';
  manageProject() {
    console.log(`${ProjectManager.displayName} manages project...`);
  }
}

class Team {
  getDeveloper() {
    return new JavaDeveloper();
  }
  getTester() {
    return new ManualTester();
  }
  getProjectManager() {
    return new ProjectManager();
  }
}

// usage
const team = new Team();
const developer = team.getDeveloper();
const tester = team.getTester();
const projectManager = team.getProjectManager();

developer.writeCode();
tester.testCode();
projectManager.manageProject();