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