Skip to content

Instantly share code, notes, and snippets.

@rajikaimal
Last active February 5, 2019 16:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rajikaimal/bbb342636a14202da5f553a51fc47c3a to your computer and use it in GitHub Desktop.
Save rajikaimal/bbb342636a14202da5f553a51fc47c3a to your computer and use it in GitHub Desktop.
Abstract factory in ES6
class PorscheCar {
constructor(params) {
this.engine = params.engine;
this.tyreModel = params.tyreModel;
this.gears = params.gears;
}
}
class PorscheCarFactory {
createCar(params) {
return new PorscheCar(params);
}
}
class FerrariCar {
constructor(params) {
this.engine = params.engine;
this.tyreModel = params.tyreModel;
this.gears = params.gears;
this.turbo = params.turbo;
}
}
class FerrariCarFactory {
createCar(params) {
return new FerrariCar(params);
}
}
class CarFactoryImpl {
constructor() {
this.porscheCar = new PorscheCarFactory();
this.ferrariCar = new FerrariCarFactory();
}
getPorsche() {
return this.porscheCar;
}
getFerrari() {
return this.ferrariCar;
}
}
const fact = new CarFactoryImpl();
let params = { engine: "raw", tyreModel: "basic", gears: null };
const concretePorsche = fact.getPorsche().createCar(params);
console.log(concretePorsche.engine);
params = { engine: "rawraw", tyreModel: "basic", gears: null, turbo: true };
const concreteFerrari = fact.getFerrari().createCar(params);
console.log(concreteFerrari.turbo);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment