El costo de memoria en las aplicaciones incide de manera significativa en el rendimiento de las aplicaciones.  Con el fin de hacer eficiente la codificación de sistemas se implementan patrones que aprovechan el uso de la memoria. En esta ocasión abordaremos el patrón “flyweight”. Este patrón permite que un objeto pueda ser utilizado en diferentes contextos, siendo independiente por cada contexto donde es utilizado. El elemento más distintivo que se considera en este caso es el estado intrínseco y extrínseco que se obtiene al utilizarlo. El estado intrínseco es el que se almacena en el objeto “flyweight”, el cual conserva la información que es independiente del contexto, la que permite que este objeto sea compartido entre contexto. El estado extrínseco depende del contexto y posee la información que no pude ser compartida. Los objetos clientes mantienen la responsabilidad de interactuar con el estado extrínseco cuando sea necesario.  Tomando como ejemplo un editor de texto, el “flyweight” pudiera ser representado por cada letra del alfabeto, donde cada letra representa el estado intrínseco y donde se muestra en un documento, su formato, posición y otras propiedades, representan el estado extrínseco. Por lo que se visualiza un solo objeto en múltiples contextos. 

fly

Entonces, exactamente, ¿Cuándo aplicarlo? Este patrón es aplicado cuando:

  • Una aplicación que utilice amplia cantidad de objetos.
  • Aplicación con altos costos de almacenamiento.
  • La mayoría de los objetos pueden ser expresado extrínsecamente.
  • La aplicación no depende la identidad del objeto. Desde que dichos objetos pueden ser compartidos las pruebas de identidad devuelven siempre un objeto diferente.

Componentes

  • Flyweight: Declara la interfaz a través de la cual se puede recibir y actuar en el estado extrínseco.
  • ConcreteFlyweight: Implementa la interfaz y almacena el estado intrínseco. Este es el objeto que se comparte. Cada estado que se almacene debe ser intrínseco. Independiente del contexto.
  • UnsharedConcreteFlyweight: No todas las clases necesitan ser compartidas. La interfaz Flyweight es quien habilita la característica de compartir el estado u objeto.
  • FlyweightFactory: Administra los objetos flyweight. Se asegura que los objetos se comparten de la manera correcta. Se encarga de suplir la instancia o crearla.
  • Client: Mantiene la referencia a cada objeto flyweight. Procesa o almacena los estados intrínsecos.

Flyweight en la Web. Trabajando con el DOM

En la web, se puede utilizar el flyweight con el DOM. Una muestra de ello se ve en el manejador de eventos, utilizando la propiedad denominada “bubbling”. Mediante esta propiedad, se le puede asignar un evento a un componente y todos sus hijos podrán lanzar el mismo evento, sin tener que duplicar el mismo evento para todos.
<!–

More Info (Address)

This is more information

Even More Info (Map)

–>

var stateManager = {

   fly: function () {

      var self = this;

      $( "#container" )
         .unbind()
       .on( "click", "div.toggle", function ( e ) {
       self.handleClick( e.target );
    });
 },

   handleClick: function ( elem ) {
      elem.find( "span" ).toggle( "slow" );
   }
 };

También, se puede utilizar en la optimización de los objetos JavaScript, por ejemplo, utilizando jQuery, cuando se implementamos una función, usualmente la instrucción genera una nueva instancia del elemento jQuery.

$("div").on( "click", function () {
   console.log( "You clicked: " + $( this ).attr( "id" ));
 });

Una solución sería acceder a una misma instancia del jQuery, añadiéndole los objetos propios con los que se trabaja, en lugar de crear una nueva.

jQuery.single = (function( o ){

   var collection = jQuery([1]);
   return function( element ) {

      // Give collection the element:
      collection[0] = element;

      // Return the collection:
      return collection;

   };
 })();

$( "div" ).on( "click", function () {

   var html = jQuery.single( this ).next().html();
   console.log( html );

});
Con  flyweight se optimiza el funcionamiento de sistemas, no sólo aquellos web. Combinando con propiedades inmutables de los objetos, permiten crear una cache  donde se guarda una referencia al objeto original.
Fuente:
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s