samenvatting
Een Factory Method maakt nieuwe objecten aan volgens de instructies van de client. Een manier om objecten te maken in JavaScript is door het aanroepen van een constructor functie met de nieuwe operator. Er zijn echter situaties waarin de cliënt niet weet, of niet zou moeten weten welke van de verschillende kandidaat-objecten te instantiëren. De Factory methode staat de client toe om object creatie te delegeren met behoud van de controle over welk type te instantieren.
het belangrijkste doel van de fabrieksmethode is uitbreidbaarheid. Fabrieksmethoden worden vaak gebruikt in toepassingen die collecties beheren, onderhouden of manipuleren van objecten die verschillend zijn, maar tegelijkertijd veel kenmerken (d.w.z. methoden en eigenschappen) gemeen hebben. Een voorbeeld hiervan is een verzameling documenten met een mix van Xml-documenten, Pdf-documenten en Rtf-documenten.
Diagram
deelnemers
- Creator — in sample code: In de fabriek
- de ‘fabriek’ object dat creëert nieuwe producten
- implementeert ‘factoryMethod’ geeft nieuw gemaakte producten
- AbstractProduct — niet gebruikt in JavaScript
- verklaart een interface voor producten
- ConcreteProduct — In de voorbeeld code: Werknemers
- het product wordt gecreëerd
- alle producten ondersteunen de interface-eigenschappen en methoden)
Voorbeeld code in JavaScript
In deze JavaScript-voorbeeld de Fabriek object maakt vier verschillende soorten werknemers. Elk type werknemer heeft een ander uurtarief. De createwerknemer methode is de Werkelijke Fabriek methode. De klant instrueert de fabriek welk type werknemer te creëren door het doorgeven van een type argument in de fabriek methode.
Het AbstractProduct in het diagram is Niet geïmplementeerd omdat Javascript geen abstracte klassen of interfaces ondersteunt. We moeten er echter wel voor zorgen dat alle soorten medewerkers dezelfde interface hebben (eigenschappen en methoden).
Er worden vier verschillende medewerkerstypen aangemaakt; alle worden in dezelfde array opgeslagen. Elke werknemer wordt gevraagd om te zeggen wat ze zijn en hun uurtarief.
de log functie is een helper die resultaten verzamelt en weergeeft.
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