Patrones de dise帽o en Javascript, Singleton y Factory

Patrones de dise帽o en Javascript, Singleton y Factory

驴Qu茅 es un patr贸n de dise帽o?

Cada patr贸n describe un problema que ocurre una y otra vez en nuestro entorno, y luego describe el n煤cleo de la soluci贸n a ese problema, de tal manera que puedes utilizar esta soluci贸n millones de veces, sin nunca hacerlo de la misma forma dos veces.

  • Arquitecto Christopher Alexander

La definici贸n del patr贸n de dise帽o no viene del desarrollo de software, sino de la arquitectura del habitat humano.

Tanto la arquitectura del h谩bitat humano como el desarrollo de software tienen muchas similitudes, esto es porque como seres humanos somos parte del mundo y de la naturaleza. Por lo tanto el desarrollo de software busca siempre representar el mundo real,聽 de hecho la programaci贸n de cualquier aplicaci贸n siempre se usa para solucionar problemas reales de nuestro entorno.

Entonces podemos comprender que un patr贸n de dise帽o permite ofrecer una soluci贸n a problemas comunes en el dise帽o de software, describe la soluci贸n a problemas que se repiten muchas veces y que son muy similares entre ellos, en concreto, esta similitud permite dise帽ar una soluci贸n para un conjunto de problemas parecidos.

Los patrones de dise帽o actuales fueron popularizados por el libro Design patterns: elements of reusable object-oriented softwarede los autores conocidos como GoF(Gang of Four):

  • Erich Gamma
  • Richard Helm
  • Ralph Johnson
  • John Vlissides

En este libro se describen 23 patrones de dise帽o que desde 1995 hasta nuestros d铆as siguen en uso con un gran impacto en el desarrollo de software. Esto no quiere decir que estos patrones no fueron utilizados mucho antes de la publicaci贸n del libro.

Este art铆culo ser谩 el primero de una serie, que nos permitir谩 entender como se pueden implementar muchos de estos patrones de dise帽o en el lenguaje de programaci贸n Javascript y no solo los descritos por GoF, tambi茅n se explicara otros patrones de dise帽o 煤tiles en Javascript.

El primer patr贸n de dise帽o es el Patron Singleton.

Patr贸n Singleton

Este patr贸n nos permite tener una solo instancia de un tipo de objeto, porque no es necesario crear varias instancias nuevas cuando una solo instancia puede encargarse del mismo trabajo en toda la aplicaci贸n. Al solo tener una instancia, centralizamos la informaci贸n, funcionalidad y mejoramos el rendimiento disminuyendo el uso de memoria.

En Javascript es muy f谩cil utilizar este patr贸n, tan f谩cil como crear un objeto literal, por ejemplo supongamos que tenemos una configuraci贸n para el n煤mero de caracteres y palabras que se muestran en un sitio web optimizado para buscadores:

let configSEO = {
    nombre: 'Pensemosweb',
    seo: {
      descripcion: {
        limiteCaracteres: 155,
        limitePalabras: 23
      },
      titulo: {
        limiteCaracteres: 70,
        limitePalabras: 9
      }
    }
};

Un simple objeto de configuraci贸n es un singleton, pues en toda la app se va a hacer referencia al objeto configSEO y nunca se va a crear m谩s nuevos objetos porque se puede extender esa configuraci贸n a帽adiendo m谩s propiedades.

Ahora supongamos que necesitamos utilizar objeto donde existan funciones de configuraci贸n y m茅todos, adem谩s de una interfaz para obtener la instancia, tomando el mismo ejemplo de configSEO ahora vamos a utilizar funciones anidadas y closure (o cierres), esto ultimo permite a una funci贸n tener acceso a las funciones y variables definidas en el 谩mbito en que esta funci贸n tambi茅n es definida.

La funci贸n an贸nima principal se invoca inmediatamente con la notacion (function() {}()) y recibe un par谩metro el, el cual guarda la referencia al elemento del DOM con id resultado. Este par谩metro se lo pasamos a la funci贸n inmediata a trav茅s de la variable global elem.

Debido a que definimos instancia dentro de la funci贸n principal, las funciones anidadas definidas m谩s adelante tienen acceso a esa variable instancia que guardara nuestro singleton cuando invoquemos la funci贸n configSEO().

Adem谩s metodoPublico()y privada() tienen acceso a las variables instancia y el.

Si nos fijamos en la l铆nea 48, elem.append(conf1 === conf2), comparamos igualdad de referencia, conf1y conf2son el mismo objeto, como singleton, solo trabajamos con una instancia.

Tambi茅n podemos hacer uso de otro patr贸n de dise帽o llamado factory, el cual veremos m谩s a detalle en otro post, por el momento solo ten en cuenta que tendremos una funci贸n que fabricara singletons.

Podemos notar que con una sola funci贸n, podemos acceder a los singletons creados anteriormente y podemos agregar m谩s si queremos. Este tipo de patr贸n factory de singletons es muy utilizado en frameworks como AngularJS. Aqu铆 abajo un ejemplo del singleton configSEO y el factor y usando AngularJS.

Podr铆a interesarte

驴C贸mo crear un servidor web en 5 minutos con Node.js?

Para crear un servidor web en node.js, primero, 驴Qu茅 es node.js?, tomando la definici贸n del sitio oficial, es un entorno de ejecuci贸n para JavaScript construido con el motor de JavaScript V8 de Chrome. Node.js usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente. El ecosistema de paquetes de Node.js, npm, es el ecosistema m谩s grande de librer铆as de c贸digo abierto en el mundo.