P-Adapt-Factoria

Download Report

Transcript P-Adapt-Factoria

Patrones de Diseño
GEYFFER ALEXANDER ACOSTA
CRISTHIAN DOUGLAS CASTRO
JESSICA MANRIQUE MOLINA
YORLEY REYES GARCIA
CARLOS ALBERTO VERGARA
PATRONES DE DISEÑO
GoF
INTRODUCCIÓN
Lo importante es mostrar como
utilizar Los patrones GoF y los Grasp
más básicos.
PATRONES DE DISEÑO
GoF
Patrones: Son principios y estilos que
sirven Para diseñar los objetos.
Los patrones se pueden clasificar según
su proposito:
Patrones de Creacion
Patrones de Comportamiento
Patrones estructurales
Patrones de Creación
Abstraen la forma en la que se crean
los objetos, permitiendo la creacion de
las clases de forma genérica dejando
para más tarde la decisión de qué
clases crear o cómo crearlas (Factory,
Singleton y Prototype).
Patrones de Creación
Según donde se tome dicha decisión
podemos clasificar a los patrones de
creación en patrones de creación de clase
(la decisión se toma en los constructores
de las clases y usan la herencia para
determinar la creación de las instancias) y
patrones de creación de objeto (se
modifica la clase desde el objeto).
Patrones de Comportamiento
Los patrones de comportamiento
estudian las relaciones entre llamadas
entre los diferentes objetos,
normalmente ligados con la dimensión
temporal (Observador y Estrategia).
Patrones estructurales
Hacen relación a como las clases y los
objetos se combinan para dar lugar a
estructuras más complejas.
Se puede hablar de patrones
estructurales asociados a clases
(Adapter) y asociados a objetos
(Composite, Decorator, Facade), los
primeros utilizarán la herencia, los
segundos la composición.
Patrones estructurales
Los patrones estructurales asociados
con objetos describen formas de
componer los objetos para conseguir
nueva funcionalidad.
La flexibilidad de la composición de
objetos viene de la posibilidad de
cambiar la composición en tiempo de
ejecución, lo que es imposible con la
composición estática de clases.
Patrones de la Pandilla
de los Cuatro (GoF)
Reciben el nombre de pandilla de los
cuatro, puesto que el libro Design
Patterns fue escrito por cuatro autores
Estos patrones son:
Adaptador
Factoria
Singleton
Adapter(Patrón Adaptador)
Problema
Comó resolver interfaces incompatibles, o
proporcionar una interfaz estable para
componentes parecidos con diferentes
interfaces?
Solución
Convertir la interfaz original de un
componente en otra interfaz, mediante un
objeto adaptador intermedio.
Adapter(Patrón Adaptador)
El diagrama general
Adapter(Patrón Adaptador)
A continuación explicamos cada uno de
los Roles del diagrama
Client :
Clase que llama metodos de otra clase
a travéz de una interfaz(target) , sin
asumir que el objeto que implementa el
método al que llama, pertenezca a una
clase específica.
Adapter(Patrón Adaptador)
Target:
Esta interfaz declara el método que
una clase Client llama, es
dependiente del dominio que utiliza el
cliente.
Adapter(Patrón Adaptador)
Adapter:
Esta clase implementa la interfaz.
Implementa el método que el cliente
llama, haciendo un llamado a un método
de la clase Adaptee, la cual no
implementa la interfaz.
Adapter(Patrón Adaptador)
Adaptee:
Esta clase no implementa el método
de la interfaz, pero tiene algún
método que la clase cliente quiere
llamar.
Adapter(Patrón Adaptador)
Una clase Adaptador implementa una
interfaz conocida para sus clientes, y
provee acceso a una instancia de una
clase no conocida. Un objeto
Adaptador provee la funcionalidad
prometida por una interfaz, sin tener
que asumir qué clase es usada para
implementar la interfaz.
Factory(Patrón Factoria)
Problema
¿Quién debe ser el responsable para la
creación de objetos, se desea separar las
responsabilidades de creación para mejorar
la cohesión?
Solución
Crear un objeto factoría que maneje la
creación de objetos.
Factory(Patrón Factoria)
La idea que se esconde detrás de este patrón
es la de centralizar el sitio donde se crean los
objetos, normalmente donde se crean objetos
de una misma "familia", como podría ser
componentes visuales, componentes de la lógica
del negocio, o objetos concurrentes en el
tiempo.
Factory(Patrón Factoria)
La clase factoría devuelve una instancia de un
objeto según los datos que se le pasan como
parámetros. Para que la creación centralizada
de objetos sea útil y eficaz todos los objetos
creados deben descender de la misma clase o
implementar el mismo interface (es decir,
hagan una operación similar pero de distintas
formas), asi podemos usarlos todos de la misma
manera, con los mismos métodos
(polimorfismo).
Factory(Patrón Factoria)
Los objetos Factoria tienen ventajas como:
Separan la responsabilidad de la crecion
compleja en objetos de apoyo (helpers).
Ocultan la logica de creacion
potencialmente compleja.
Permiten introducir estrategias para
mejorar el rendimiento de la gestion de la
memoria, objetos cache o de reciclaje.
Factory(Patrón Factoria)
Suponiendo la clase base figura para un conjunto
de figuras geometricas:
public abstract Figura {
int lado = 0
public figura (int lado) {
this.lado = lado;
}
public abstract int getArea ();
public abstract void dibujar (Graphics g,
int x, int y);
}
Factory(Patrón Factoria)
Ahora una clase hija cuadrado:
public Cuadrado {
public Cuadrado (int lado) {
super (lado);
}
public int getArea () {
return (lado x lado);
}
public void dibujar (Graphics g, int x, int y) {
g.setColor (Color.black);
g.setDrawRect (x, y, lado, lado);
}
}
Factory(Patrón Factoria)
Ahora otra clase hija, circulo:
public Circulo {
public Circulo (int lado) {
super (lado);
}
public int getArea () {
return (Math.PI x lado x lado);
}
public void dibujar (Graphics g, int x, int y) {
g.setColor (Color.black);
g.setDrawArc (x, y, lado, lado, 0, 360);
}
}
Factory(Patrón Factoria)
Esta factoría funciona recibiendo un argumento que
determina que clase de figura crear:
public void FactoriaDeFiguras {
public static final int CUADRADO = 0
public static final int CIRCULO = 1
public Figura getFigura (int tipo, int lado) {
if (tipo == this.CUADRADO) {
return (new Cuadrado (lado))
}
else {
return (new Circulo (lado))
}
}
}
Singleton (Patrón Unitario)
¿Qué es un Singletón?
Un singleton es una clase que tiene una
lógica que solamente le permite
instanciarse una vez en un objeto, es
decir, que solamente se podrá llamar a
su constructor una sola vez.
Singleton (Patrón Unitario)
En Computación, el patrón de diseño
singleton (patrón unitario) está diseñado
para restringir la instanciación de una clase
o valor de un tipo a un solo o eventualmente
muy pocos objetos. Resulta muy útil cuando
por ejemplo se necesita un único objeto que
coordina acciones en un sistema. Algunas
veces se utiliza también en aplicaciones en
donde resulta más eficiente trabajar con
uno o muy pocos objetos.
Singleton (Patrón Unitario)
Es importante para algunas clases tener
exactamente una sola instancia. Por
ejemplo:
Aunque
puede
haber
muchas
impresoras en un sistema, debe haber
solo una cola de impresora.
Deberá haber sólo un sistema de
archivos y un manejador de ventanas.
Una cuenta de sistema estará
dedicada a servir a una compañía
Singleton (Patrón Unitario)
El propósito de este patrón es asegurar que
una clase solo tenga una instancia, y proveer
un punto global de acceso a ella.
Se debe usar el patrón Singleton cuando:
Debe haber exactamente una instancia de
la clase, y debe ser accesible a los clientes
desde un punto de acceso bien conocido.
Singleton (Patrón Unitario)
Cuando la única instancia debe ser
extensible solo por subclase, y los clientes
deben ser capaces de usar una instancia
extendida sin modificar su código.
El sistema solo necesita emplear una única
instancia de una clase.
La clase debe ser accesible
diferentes partes del sistema.
desde
Singleton (Patrón Unitario)
Las clases que cumplen estas características
suelen tener alguna de estas funciones:
Controlar el acceso a un recurso que por su
naturaleza no admite el acceso concurrente
(impresora, socket, fichero).
Obtener referencias de clases que actúan
como servidoras de recursos (pool de
conexiones).
Singleton (Patrón Unitario)
Ejecutar código carente de estado (si el
estado no cambia solo necesitamos una
instancia).
Mantener un estado que debe ser
globalmente único.
Singleton (Patrón Unitario)
El patrón singleton se implementa
creando una clase con un método que
crea una instancia del objeto sólo si
todavía no existe alguna. Para asegurar
que la clase no puede ser instanciada
nuevamente se regula el alcance del
constructor (con atributos como
protegido o privado).
Singleton (Patrón Unitario)
La instrumentación del patrón puede ser
delicada en programas con múltiples hilos
de ejecución. Si dos hilos de ejecución
intentan crear el valor único al mismo
tiempo y éste no existe todavía, sólo uno
de ellos debe lograr crear el objeto.
La solución clásica para este problema es
utilizar exclusión mutua en método de
creación de la clase que implementa el
patrón.
Singleton (Patrón Unitario)
Esta es una implementación en el
lenguaje de programación Java de una
clase Singleton:
/**
*Clase que implementa el patrón singleton
*
*Para obtener el valor de la clase, ejecutar
*Singleton.getInstance()
*/
Singleton (Patrón Unitario)
public class Singleton {
/**
*Para permitir la extensión de la clase,
*constructor se define como protegido.
*/
protected Singleton() {
// ...
}
el
Singleton (Patrón Unitario)
/**
*Acceso privado al único objeto de la clase
*/
static private Singleton instance = null;
/**
* @return El único objeto de la clase.
*/
static public Singleton getInstance() {
if(null == instance) {
instance = new Singleton();
}
return instance;
}