Resumen
Un método de fábrica crea nuevos objetos según las instrucciones del cliente. Una forma de crear objetos en JavaScript es invocando una función de constructor con el nuevo operador. Sin embargo, hay situaciones en las que el cliente no sabe, o no debería saber, cuál de los varios objetos candidatos crear una instancia. El método Factory permite que el cliente delegue la creación de objetos mientras mantiene el control sobre qué tipo crear una instancia.
El objetivo clave del Método de fábrica es la extensibilidad. Los métodos de fábrica se utilizan con frecuencia en aplicaciones que administran, mantienen o manipulan colecciones de objetos que son diferentes pero que al mismo tiempo tienen muchas características (es decir, métodos y propiedades) en común. Un ejemplo sería una colección de documentos con una mezcla de documentos Xml, documentos Pdf y documentos Rtf.
Diagrama
Participantes
- Creador In En código de muestra: Factory
- el objeto ‘factory’ que crea nuevos productos
- implementa ‘Método de factoriZación’ que devuelve productos recién creados
- AbstractProduct not no utilizado en JavaScript
- declara una interfaz para productos
- ConcreteProduct In En código de muestra: Empleados
- el producto que se está creando
- todos los productos admiten la misma interfaz (propiedades y métodos)
Código de ejemplo en JavaScript
En este ejemplo de JavaScript, el objeto Factory crea cuatro tipos diferentes de empleados. Cada tipo de empleado tiene una tarifa por hora diferente. El método createEmployee es el Método de fábrica real. El cliente indica a la fábrica qué tipo de empleado crear pasando un argumento de tipo al Método Factory.
El AbstractProduct en el diagrama no se implementa porque Javascript no admite clases o interfaces abstractas. Sin embargo, todavía tenemos que asegurarnos de que todos los tipos de empleados tengan la misma interfaz (propiedades y métodos).
Se crean cuatro tipos de empleados diferentes; todos se almacenan en la misma matriz. A cada empleado se le pide que diga lo que es y su tarifa por hora.
La función de registro es un ayudante que recopila y muestra los resultados.
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