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();