class Figure{
constructor(){
this.name = "Figure";
}
}
class Pawn extends Figure{
constructor(){
super();
this.name = "Pawn";
}
}
class King extends Figure{
constructor(){
super();
this.name = "King";
}
}
class Queen extends Figure{
constructor(){
super();
this.name = "Queen";
}
}
const Factory = {
registeredTypes: new Map(),
register(className, classReference) {
if (!(Factory.registeredTypes.has(className) && classReference.prototype instanceof Figure)) {
Factory.registeredTypes.set(className, classReference);
} else {
}
},
create(className, ...options) {
if (!Factory.registeredTypes.has(className)) {
console.error("!!!");
return null;
}
let classReference = this.registeredTypes.get(className);
let instance = new classReference(...options);
return instance;
}
}
Factory.register("Pawn", Pawn);
Factory.register("King", King);
Factory.register("Pawn", Queen);
console.log(Factory.create("Pawn"));