Hola hoy ya casi terminando con los patrones de diseño estructurales, hoy vamos a ver el patrón Flyweight o Peso ligero.
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:
IVehiculo
Auto
FlyweightFactory
Main
Bueno gente espero que haya quedado claro cualquier cosa, como siempre avisen!
Saludos!
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
Diagrama UML
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
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:
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?
Reviewed by El lado oscuro de java
on
octubre 21, 2014
Rating:
IFlyweight y ConcreteFlyweight tienen la misma descripción, al parecer cometiste error al copiar y pegar
ResponderEliminarHola blazfemo al revisarlo tenes razon ahora lo corrijo gracias por pasar!
EliminarLa fabrica de pesos ligeros y el cliente tienen la misma descripción.
ResponderEliminarCliente
Mantiene una referencia a los pesos ligeros
- calcula o guarda el estado extrínseco de los pesos ligeros.