Summary
Eine Factory-Methode erstellt neue Objekte gemäß den Anweisungen des Clients. Eine Möglichkeit, Objekte in JavaScript zu erstellen, besteht darin, eine Konstruktorfunktion mit dem neuen Operator aufzurufen. Es gibt jedoch Situationen, in denen der Client nicht weiß oder nicht wissen sollte, welches von mehreren Kandidatenobjekten instanziiert werden soll. Mit der Factory-Methode kann der Client die Objekterstellung delegieren und gleichzeitig die Kontrolle darüber behalten, welcher Typ instanziiert werden soll.
Das Hauptziel der Factory-Methode ist die Erweiterbarkeit. Factory-Methoden werden häufig in Anwendungen verwendet, die Sammlungen von Objekten verwalten, verwalten oder bearbeiten, die unterschiedlich sind, aber gleichzeitig viele gemeinsame Merkmale (dh Methoden und Eigenschaften) aufweisen. Ein Beispiel wäre eine Sammlung von Dokumenten mit einer Mischung aus XML-Dokumenten, PDF-Dokumenten und RTF-Dokumenten.
Diagramm
Teilnehmer
- Creator — In Beispielcode: Factory
- das ‚factory‘-Objekt, das neue Produkte erstellt
- implementiert ‚FactoryMethod‘, das neu erstellte Produkte zurückgibt
- AbstractProduct — wird nicht in JavaScript verwendet
- deklariert eine Schnittstelle für Produkte
- ConcreteProduct — Im Beispielcode: Employees
- das erstellte Produkt
- Alle Produkte unterstützen dieselbe Schnittstelle (Eigenschaften und Methoden)
Beispielcode in JavaScript
In diesem JavaScript-Beispiel erstellt das Factory-Objekt vier verschiedene Arten von Mitarbeitern. Jeder Mitarbeitertyp hat einen anderen Stundensatz. Die createEmployee-Methode ist die eigentliche Factory-Methode. Der Client weist die Factory an, welche Art von Mitarbeiter erstellt werden soll, indem er ein Typargument an die Factory-Methode übergibt.
Das AbstractProduct im Diagramm ist nicht implementiert, da Javascript keine abstrakten Klassen oder Schnittstellen unterstützt. Wir müssen jedoch weiterhin sicherstellen, dass alle Mitarbeitertypen dieselbe Schnittstelle (Eigenschaften und Methoden) haben.
Es werden vier verschiedene Mitarbeitertypen erstellt, die alle im selben Array gespeichert sind. Jeder Mitarbeiter wird gebeten zu sagen, was er ist und welchen Stundensatz er hat.
Die Log-Funktion ist ein Helfer, der Ergebnisse sammelt und anzeigt.
function Factory() { this.createEmployee = function (type) { var employee; if (type === "fulltime") { employee = new FullTime(); } else if (type === "parttime") { employee = new PartTime(); } else if (type === "temporary") { employee = new Temporary(); } else if (type === "contractor") { employee = new Contractor(); } employee.type = type; employee.say = function () { log.add(this.type + ": rate " + this.hourly + "/hour"); } return employee; }}var FullTime = function () { this.hourly = "$12";};var PartTime = function () { this.hourly = "$11";};var Temporary = function () { this.hourly = "$10";};var Contractor = function () { this.hourly = "$15";};// log helpervar log = (function () { var log = ""; return { add: function (msg) { log += msg + "\n"; }, show: function () { alert(log); log = ""; } }})();function run() { var employees = ; var factory = new Factory(); employees.push(factory.createEmployee("fulltime")); employees.push(factory.createEmployee("parttime")); employees.push(factory.createEmployee("temporary")); employees.push(factory.createEmployee("contractor")); for (var i = 0, len = employees.length; i Run