Factory method
by Artem
TypeScript
interface Venichle {
setColor(rgb: string): void;
getColor(): string;
}
abstract class VenichleFactory {
protected abstract createVenichle()
public create() {
const venichle = this.createVenichle();
venichle.setColor('black');
return venichle;
}
}
class GermanFactory extends VenichleFactory {
public createVenichle() {
const carMercedes = new Mercedes();
carMercedes.addAMGTuning();
return carMercedes;
}
}
class Mercedes implements Venichle {
private color;
public setColor(rgb) {
this.color = rgb;
}
public getColor() {
return this.color;
}
public addAMGTuning() {
}
}
class Italian extends VenichleFactory {
public createVenichle() {
const carFerrari = new Ferrari();
return carFerrari;
}
}
class Ferrari implements Venichle {
private color;
public setColor(rgb) {
this.color = rgb;
}
public getColor() {
return this.color;
}
}
const factory = new GermanFactory();
const carMercedes: Venichle = factory.create();