Factory Pattern en JavaScript
Estudiantes y amigos me han preguntado sobre algunos ejemplos que inlcuyo en los cursos, donde se “emula” el concepto de una “clase” en JavaScript.
Lo que uso un patrón conocido como Factory Pattern, en donde se crea un objeto, el cual contiene funciones que devuelven objetos. Además, se crea un “closure” permitiendo la creación de variables y metodos locales en la clase.
var mymodule=function(){
// aquí puedes colocar variables privadas
// también puedes colocar métodos privados
return {
metodo1 : function (){
},
metodo2 : function(){
}
}
}()
Un ejemplo trivial sería una clase para validaciones de campos.
var myvalidator=function(){
return {
isEmail : function (value){
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value)){
return (true)
}else{
return (false)
}
},
isDate : function (value){
var dateRegEx = new RegExp(/^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/);
if (dateRegEx.test(value)){
return true;
}
return false;
}
}
}()
Y para utilizar tu nueva clase…
alert(myvalidator.isEmail('some@email.com'));
Pero el verdadero objetivo del Factory Pattern es fabricar objetos, y la mejor manera que puedo imaginar para explicarlo, es en el contexto de Titanium.
Si por ejemplo quisieras crear una clase que te devuelve un “TextBox” con ciertas cualidades, puedes usar algo así:
var myfactory=function(){
return {
getTextBox : function (values){
return Ti.UI.createTextField(
width : values.width,
height: values.height,
backgroundColor : values.backgroundColor
)
}
}
}()
Y si fueras a utilizarlo…
var mynewobject=myfactory.getTextBox({width:100,height:100,backgroundColor:#fff});
Si te quieres meter de lleno en JavaScript uno de los lenguajes de programación más divertidos, más utilizados y más subestimados que existen, te recomiendo que veas la excelente presentación de Robert Nyman : JavaScript:Like a box of chocolates.



Ricardo Alcocer es consultor de tecnologías libres y experto en desarrollo de software de escritorio para Windows, Mac y Linux, aplicaciones Web basadas en estándres abiertos y aplicaciones móviles para iPhone y Android. Es director de Tecnología Libre, Inc. y fundador de INTELCA - Instituto de Tecnologías Libres del Caribe. 












