mardi 4 octobre 2016

Why are my extended class properties not overriding? (Factory Method Pattern in Typescript 2.0 attempt)

I've been trying to implement OOP Design patterns in Typescript in order to learn both domains.

My attempt at the Factory Method pattern from oodesign.com is below, followed by the output.

Why do my ConcreteProductXs not override their name properties?

    // Product interface
    abstract class Product {
        name: string
        constructor(productName?: string) {
            if (productName) this.name = productName
        }
    }

    // Concrete Products
    class ConcreteProductA extends Product {
        name: "Concrete Product A"
    }
    class ConcreteProductB extends Product {
        name: "Concrete Product B"
    }

    // Abstract factory
    abstract class ProductFactory {
        create(productCode?: string): Product {
            return this.factoryMethod(productCode)
        }
        protected abstract factoryMethod(productCode?: string): Product
    }

    // Concrete Product Factory
    class ConcreteProductsFactory extends ProductFactory {
        protected factoryMethod(productCode?: string): Product {
            switch (productCode) {
                case "A": return new ConcreteProductA()
                case "B": return new ConcreteProductB()
                case "C": return new ConcreteProductB("Rebadged Concrete Product B")
                default: return null
            }
        }
    }

    let concreteProductsFactory = new ConcreteProductsFactory()
    let concreteProductA = concreteProductsFactory.create("A")
    let concreteProductB = concreteProductsFactory.create("B")
    let concreteProductC = concreteProductsFactory.create("C")
    console.log(ConcreteProductA)
    console.log(concreteProductB)
    console.log(concreteProductC)

Output:

ConcreteProductA {} ConcreteProductB {} ConcreteProductB { name: 'Rebadged Concrete Product B' }

Aucun commentaire:

Enregistrer un commentaire