savchukoleksii
7/2/2018 - 12:20 PM

Patterns on JS

class Singletone{    
    constructor(){
        if(Singletone.instance){
            return Singletone.instance;
        }
        
        Singletone.instance = this;
    }
}
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"));