Middle
Nennen Sie die Muster, die zu den Erzeugungsmustern gehören.
sobes.tech KI
Antwort von AI
- Fabrikmethode (Factory Method): Definiert eine Schnittstelle zur Objekterstellung, lässt aber Unterklassen entscheiden, welche Klasse instanziiert wird.
// Schnittstelle der Fabrik class Creator { factoryMethod() { throw new Error("Methode muss von Unterklassen implementiert werden"); } anOperation() { const product = this.factoryMethod(); return `Creator: dieselbe Logik, die gerade mit ${product.operation()} gearbeitet hat`; } } // Konkrete Fabrik, die ProductA erstellt class ConcreteCreatorA extends Creator { factoryMethod() { return new ConcreteProductA(); } } // Schnittstelle des Produkts class Product { operation() { throw new Error("Methode muss von Unterklassen implementiert werden"); } } // Konkretes Produkt, erstellt von ConcreteCreatorA class ConcreteProductA extends Product { operation() { return "Ergebnis von ConcreteProductA"; } } // Verwendung const creator = new ConcreteCreatorA(); console.log(creator.anOperation()); - Abstrakte Fabrik (Abstract Factory): Bietet eine Schnittstelle zur Erstellung von Familien verwandter oder abhängiger Objekte, ohne ihre konkreten Klassen zu spezifizieren.
// Schnittstelle der abstrakten Fabrik class AbstractFactory { createProductA() { throw new Error("Methode muss von Unterklassen implementiert werden"); } createProductB() { throw new Error("Methode muss von Unterklassen implementiert werden"); } } // Konkrete Fabrik für die Erstellung von Produkten Variante 1 class ConcreteFactory1 extends AbstractFactory { createProductA() { return new ConcreteProductA1(); } createProductB() { return new ConcreteProductB1(); } } // Konkrete Fabrik für die Erstellung von Produkten Variante 2 class ConcreteFactory2 extends AbstractFactory { createProductA() { return new ConcreteProductA2(); } createProductB() { return new ConcreteProductB2(); } } // Schnittstellen der Produkte class AbstractProductA { operationA() { throw new Error("Methode muss von Unterklassen implementiert werden"); } } class AbstractProductB { operationB() { throw new Error("Methode muss von Unterklassen implementiert werden"); } anotherOperationB(collaborator) { throw new Error("Methode muss von Unterklassen implementiert werden"); } } // Konkrete Produkte Variante 1 class ConcreteProductA1 extends AbstractProductA { operationA() { return "Ergebnis von ConcreteProductA1"; } } class ConcreteProductB1 extends AbstractProductB { operationB() { return "Ergebnis von ConcreteProductB1"; } anotherOperationB(collaborator) { return `Ergebnis von ConcreteProductB1 zusammen mit ${collaborator.operationA()}`; } } // Konkrete Produkte Variante 2 class ConcreteProductA2 extends AbstractProductA { operationA() { return "Ergebnis von ConcreteProductA2"; } } class ConcreteProductB2 extends AbstractProductB { operationB() { return "Ergebnis von ConcreteProductB2"; } anotherOperationB(collaborator) { return `Ergebnis von ConcreteProductB2 zusammen mit ${collaborator.operationA()}`; } } // Verwendung function clientCode(factory) { const productA = factory.createProductA(); const productB = factory.createProductB(); console.log(productB.operationB()); console.log(productB.anotherOperationB(productA)); } console.log('Kunde: Testen von Factory1...'); clientCode(new ConcreteFactory1()); console.log('Kunde: Testen von Factory2...'); clientCode(new ConcreteFactory2()); - Builder (Builder): Ermöglicht die schrittweise Erstellung komplexer Objekte. Bietet die Möglichkeit, einen einheitlichen Bauprozess zu verwenden, um verschiedene Darstellungen des Objekts zu erhalten.
// Schnittstelle des Bauers class Builder { producePartA() { } producePartB() { } producePartC() { } } // Konkreter Bauer class ConcreteBuilder1 extends Builder { constructor() { super(); this.reset(); } reset() { this.product = new Product1(); } producePartA() { this.product.parts.push('PartA1'); } producePartB() { this.product.parts.push('PartB1'); } producePartC() { this.product.parts.push('PartC1'); } getProduct() { const result = this.product; this.reset(); return result; } } // Das dargestellte Produkt class Product1 { constructor() { this.parts = []; } listParts() { console.log(`Teile des Produkts: ${this.parts.join(', ')}`); } } // Regisseur (optional, steuert den Bauprozess) class Director { setBuilder(builder) { this.builder = builder; } buildMinimalViableProduct() { this.builder.producePartA(); } buildFullFeaturedProduct() { this.builder.producePartA(); this.builder.producePartB(); this.builder.producePartC(); } } // Verwendung const director = new Director(); const builder = new ConcreteBuilder1(); director.setBuilder(builder); console.log('Standardminimumprodukt:'); director.buildMinimalViableProduct(); builder.getProduct().listParts(); console.log('Standardvollprodukt:'); director.buildFullFeaturedProduct(); builder.getProduct().listParts(); console.log('Benutzerdefiniertes Produkt:'); builder.producePartA(); builder.producePartC(); builder.getProduct().listParts();