Patrones de Diseño - Patrón Flyweight/ Peso Ligero - ¿Que es el Patrón de Diseño Fleyweight?

Hola hoy ya casi terminando con los patrones de diseño estructurales, hoy vamos a ver el patrón Flyweight o Peso ligero.


Patrones de Diseño - ¿Que es el Patrón de Diseño Fleyweight?

Patrón de diseño Flyweight comparte estados para soportar un gran numero de objetos pequeños aumentando la eficiencia en espacio de memoria a costo de tiempo y recursos de procesamiento.

Diagrama UML

Patrones de Diseño - Patrón Flyweight/ Peso Ligero - ¿Que es el Patrón de Diseño Fleyweight?


IFlyweight: declara una interfaz a través de la cual los flyweights pueden recibir y actuar sobre los estados no compartidos.
ConcreteFlyweight:  Implementa la interfaz IFlyweight y almacena los estados compartidos, si los hay. Un objeto ConcreteFlyweight debe ser compartible. Cualquier estado que almacene debe ser intrinseco; es decir, debe ser independiente de su contexto.
UnshareConcreteFlyweight: no todas las subclases de Flyweight tienen por qué ser compartidas. La interfaz Flyweight permite que se comparta; no lo fuerza. Es común que los objetos de esta clase tengan hijos de la clase ConcreteFlyweight en algún nivel de su estructura.
FactoryFlyweight: crea y gestiona los objetos flyweight. Garantiza que los objetos flyweight se comparten de forma apropiada. Cuando un cliente solicita un flyweight, el objeto de la clase FlyweightFactory proporciona una instancia existente, o crea una.
Client: crea y gestiona los objetos flyweight. Garantiza que los objetos flyweight se comparten de forma apropiada. Cuando un cliente solicita un flyweight, el objeto de la clase FlyweightFactory proporciona una instancia existente, o crea una.

Nombre del patrón:
Patrón Flyweight/ Peso Ligero

Clasificación del Patrón:
Estructural

Intención:
Reducir el numero de objetos  de muy bajo nivel en un sistema mediante 

Motivación:
Para eliminar o reducir la redundancia cuando se tiene gran cantidad de objetos que contienen la misma información.
Cuando la memoria es crítica para el rendimiento de la aplicación.
La aplicación no depende de la identidad de los objetos.

Ejemplo:
Problema: Se requiere utilizar un programa el cual  se le cargara "varios autos" y al pedirle el detalle del mismo, muestre patente, color, dueño. Hay que tener en cuenta que debe ocupa poca memoria ya que es un proyecto masivo.

Solución:


Patrones de Diseño - Patrón Flyweight/ Peso Ligero - ¿Que es el Patrón de Diseño Fleyweight?

IVehiculo
package ar.com.patronesdisenio.flyweight;

/**
* @author nconde
*/
public interface IVehiculo {

public String mostrarDetalle();

}



Auto
package ar.com.patronesdisenio.flyweight.bo;
import ar.com.patronesdisenio.flyweight.IVehiculo;

/**
* @author nconde
*/
public class Auto implements IVehiculo{

public String color;
public String patente;
public String duenio;

/**
* <p>Constructor</p>
* @param color
* @param patente
* @param duenio
*/
public Auto(String color, String patente, String duenio){
this.color = color;
this.patente = patente;
this.duenio = duenio;
}

@Override
public String mostrarDetalle() {
return "Patente: " + this.patente + ", Color: " + this.color + " , Duenio: "+ this.duenio;
}
}


FlyweightFactory
package ar.com.patronesdisenio.flyweight;
import ar.com.patronesdisenio.flyweight.bo.Auto;

/**
* @author nconde
*/
public class FlyweightFactory {

IVehiculo auto;

/**
* <p>Lista todos los autos.</p>
* @param color
* @param patentes
* @param duenios
*/
public void listarAutos(String color[], String patentes[], String duenios[]){

for (int i = 0; i < duenios.length; i++) {
auto = new Auto(color[i], patentes[i], duenios[i]);
System.out.println("Datos del auto\n" + auto.mostrarDetalle());
}

}

}



Main
package ar.com.patronesdisenio.flyweight.main;
import ar.com.patronesdisenio.flyweight.FlyweightFactory;

/**
* @author nconde
*/
public class Main {

/**
* @param args
*/
public static void main(String[] args) {
FlyweightFactory ff = new FlyweightFactory();
String patentes[] = {"ARG123","CHL123","PER123"};
String colores[] ={"Negro","Azul","Rojo"};
String duenios[] ={"Carlos", "Pedro", "Julio"};

ff.listarAutos(colores, patentes, duenios);
}
}



Bueno gente espero que haya quedado claro cualquier cosa, como siempre avisen!
Saludos!
Patrones de Diseño - Patrón Flyweight/ Peso Ligero - ¿Que es el Patrón de Diseño Fleyweight? Patrones de Diseño - Patrón Flyweight/ Peso Ligero - ¿Que es el Patrón de Diseño Fleyweight? Reviewed by El lado oscuro de java on octubre 21, 2014 Rating: 5

3 comentarios:

  1. IFlyweight y ConcreteFlyweight tienen la misma descripción, al parecer cometiste error al copiar y pegar

    ResponderEliminar
    Respuestas
    1. Hola blazfemo al revisarlo tenes razon ahora lo corrijo gracias por pasar!

      Eliminar
  2. La fabrica de pesos ligeros y el cliente tienen la misma descripción.
    Cliente
    Mantiene una referencia a los pesos ligeros
    - calcula o guarda el estado extrínseco de los pesos ligeros.

    ResponderEliminar

Con la tecnología de Blogger.