DESARROLLO DE SOFTWARE II
Escuela de Ingeniería y Sistemas de Computación
ING. PAVEL FRANCO MARÍ[email protected]
Agosto – Diciembre 2009
Universidad del Valle
Patrones de diseño
• Introducción
• Factoria
• Singleton
• Fachada
• Adaptador
• Compuesto
Patrones de diseño
Universidad del Valle
Universidad del Valle
Introducción
Propuestos por Gamma, Helm, Johnson, Vlissides.
• Factoría
• Singleton
• Fachada
• Adaptador
• Compuesto
Introducción
Universidad del Valle
5
Universidad del Valle
Factoría
Este tipo de patrón es muy usado debido a su
utilidad, pues su objetivo es devolver una instancia
de múltiples tipos de objetos. Normalmente, todos
estos objetos provienen de una misma clase padre,
diferenciándose entre ellos por algún aspecto de
comportamiento.
Factoría
Universidad del Valle
7
Factoría
Universidad del Valle
8
Problema
¿Quién debe ser el responsable de la creación de
objetos en una familia de clases?
Solución
Crear una clase derivada que toma la decisión
sobre qué clase instanciar y cómo instanciarla.
Factoría
Universidad del Valle
9
La clase factoría devuelve una instancia de una objeto
según los datos que se le pasan como parámetros.
Para que la creación centralizada de objetos sea lo
“útil y eficaz” posible, todos los objetos creados
descienden de la misma clase o implementan la misma
interface, así podemos usarlos todos de la misma
manera, con los mismo métodos (gracias al
polimorfismo), sin importar que clase concreta estamos
tratando en cada momento.
Factoría
Universidad del Valle
10
Estructura:
Product. Una clase en este rol es superclase abstracta de objetos producidospor el patrón Método de Fábrica.
ConcreteProduct. Cualquier claseconcreta instanciada por los objetosque participan en este patrón.
CreationRequestor. El objeto querequiere la creación, es una claseindependiente de la aplicación quenecesita crear clases especificas de laaplicación. Esto lo hace indirectamentea través de una instancia de la claseFactory.
Factoría
Universidad del Valle
11
FactoriIF. Es una interfazindependiente de la aplicación. Losobjetos que crean productosusando CreationRequestor debenimplementar esta interfaz. Lasinterfaces de este tipo declaran unmétodo que es llamado por unobjeto CreationRequestor paracrear productos concretos.
Factory. Es una clase especifica dela aplicación que implementa lainterfaz de fabrica adecuada ytiene un método para crearproductos concretos.
Factoría
Universidad del Valle
12
Implementación
El patrón permite que la función de creación “cree”
múltiples instancias de Product. El objeto Factory
será el encargado de decidir según los parámetros
que le pasemos, el tipo de objeto que nos
devolverá.
Factoría
Universidad del Valle
13
public class Vehiculo{
…
}
public class Camion extends Vehiculo{
…
}
public class Coche extends Vehiculo{
…
}
Factoría
Universidad del Valle
14
public class VehiculoFactory{
public static CAMION = 0;
public static COCHE = 1;
public Vehiculo getVehiculo(inttipo){
if(tipo == VehiculoFactory.CAMION){
return new CAMION();
}
else{
return new COCHE();
}
}
}
Factoría
Universidad del Valle
15
Aplicación
• Cuando una clase no puede anticipar el tipo deobjetos que debe crear.
• Una clase quiere que sean sus subclases quienesespecifiquen los objetos que ésta crea.
• Queremos centralizar el proceso de creación deinstancias.
• Crear objetos dentro de una clase con un método defabricación es siempre más flexible que hacerlodirectamente.
Factoría
Universidad del Valle
16
Universidad del Valle
Singleton
• Diseñado para restringir la creación de objetos
pertenecientes a una clase o el valor de un tipo a
un único objeto.
• Su intención consiste en garantizar que una clase
sólo tenga una instancia y proporcionar un punto de
acceso global a ella.
Singleton
Universidad del Valle
18
• Se implementa creando en nuestra clase 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
Universidad del Valle
19
• Las situaciones más habituales de la aplicación de
éste patrón son aquellas en las que dicha clase
controla el acceso a un recurso físico único (como
puede ser el mouse o un archivo abierto en modo
exclusivo) o cuando cierto tipo de datos debe estar
disponible para todos los demás objetos de la
aplicación.
Singleton
Universidad del Valle
20
El patrón Singleton provee una única instancia
gracias a que:
• La propia clase es responsable de crear la única
instancia.
• Permite el acceso global a dicha instancia
mediante un método de clase.
• Declara el constructor de clase como privado para
que no sea instanciable directamente.
Singleton
Universidad del Valle
21
Intención
Garantizar que una clase sólo tenga una instancia
y proporcione un punto de acceso global a ella.
Problema
Varios clientes distintos precisan referenciar a un
mismo elemento y queremos asegurarnos de que no
hay más de una instancia de ese elemento.
Singleton
Universidad del Valle
22
Solución
Garantizar una única instancia
Singleton
Universidad del Valle
23
Implementación
• Cambio el constructor a privado.
• Hago que la clase no pueda ser heredada.
• Agrego una variable estática del mismo tipo de laclase donde esta contenida (instancia).
• Agrego un método estático que retorne la variableestática (getInstance).
• No creo el objeto hasta que sea necesario.
• Agrego el código necesario para no crear dosinstancias en distintos hilos.
Singleton
Universidad del Valle
24
Implementación
Singleton
Universidad del Valle
25
Usos conocidos
Quien haya utilizado Microsoft Word, sabe que alpresionar la techa Ctrl+B se obtiene el cuadro dediálogo de búsqueda. Sin embargo, durante toda lavida de la aplicación, solo puede haber un cuadro dediálogo de búsqueda al mismo tiempo. Aún si tenemosabiertos varios documentos, solo puede existir unainstancia que trabaja en cualquier documento activo. Dehecho, necesitamos más que una instancia del cuadro dediálogo de búsqueda.
Singleton
Universidad del Valle
26
Usos conocidos
Un programa de mensajería instantánea
(Messenger), el cual debe permitir que el usuario
de una cuenta establezca sesión solo una vez al
tiempo. En esta aplicación, el patrón Singleton nos
ayuda a que la conexión del usuario sea única, a la
vez que “impide” el establecimiento de sesiones
multiusuario.
Singleton
Universidad del Valle
27
Universidad del Valle
Fachada
• El patrón Fachada proporciona una interfaz
unificada de alto nivel para un subsistema, que
oculta las interfaces de bajo nivel de las que lo
impiden.
• Con esto se consigue dos objetivos fundamentales:
hacer el subsistema más fácil de usar y desacoplar
a los clientes de las clases del subsistema.
Fachada
Universidad del Valle
29
• Cuando un cliente que trata utilizar los serviciosofrecidos por un subsistema actuando directamentesobre las interfaces de las clases que implementendicho subsistema se está exponiendo los siguientesinconvenientes:
• Debe contener el conocimiento de cómo funcionan esas clases, comprenderperfectamente la semántica de sus complejas interfaces de bajo nivel y sabercomo utilizarlas. En cada uno de los clientes debe estar codificada lasecuencia de mensajes que pondrá a las clases del subsistema encolaboración para obtener el servicio deseado.
• Debe mantenerse informado de los cambios en dichas interfaces o en ladistribución de responsabilidades entre las clases de bajo nivel y actualizarsu código adecuadamente.
Fachada
Universidad del Valle
30
Aplicaciones
Por todo esto se deberá aplicar el patrón fachada cuando se dealguna de las siguientes circunstancias:
• En general cuando por algún motivo se desee dotar de unainterfaz sencilla y usable a un subsistema complejo. Una fachadaproporciona una vista por defecto de la funcionalidad delsubsistema suficiente para la mayoría de los programadores.
• Cuando se quiera estructurar un sistema de subsistemassiguiendo un patrón de capas. Será de gran ayuda dotar de unafachada a cada nivel de subsistemas y utilizarla como punto deacceso al mismo. De este modo se simplificará al máximo elmantenimiento de las dependencias entre niveles.
Fachada
Universidad del Valle
31
Estructura
Fachada
Universidad del Valle
32
Estructura
Fachada
Universidad del Valle
33
Ventajas
• Ayuda a organizar un sistema en capas, ayuda a
controlar o eliminar las dependencias complejas o
circulares entre objetos y permite hacer cambios en los
componentes de un subsistema sin afectar a los clientes.
• En general facilita enormemente el desarrollo
independiente de clientes y subsistemas. Además tiene
un gran impacto sobre la reusabilidad de los
subsistemas.
Fachada
Universidad del Valle
34
Universidad del Valle
Adaptador
Una clase Adaptador implementa una interfaz conocidapara sus clientes y provee acceso a una instancia deuna clase no conocida. Un objeto Adaptador provee lafuncionalidad prometida por una interfaz, sin tener queasumir qué clase es usada para implementar lainterfaz.
Es usada para crear interfaces entre clases.
Este patrón adapta la interfaz de una clase a lainterfaz esperada por sus clientes. Favorece lareutilización (de la clase adaptada) y permite lacolaboración de clases con interfaces incompatibles.
Adaptador
Universidad del Valle
36
Diagrama general
Client. Clase que llama aun método de otra clase através de una interfaz, sinasumir que el objeto queimplementa el método alque llama, pertenezca auna clase especifica.
TagetIf. Esta interfazdeclara el método queuna clase Client llama.
Adaptador
Universidad del Valle
37
Adapter. Esta claseimplementa la interfaz.Implementa el método queel cliente llama, haciendo unllamado a un método de laclase Adapatee, la noimplementa la interfaz.
Adaptee. Esta clase noimplementa el método deinterfaz, pero tiene algúnmétodo que la clase clientequiere llamar.
Adaptador
Universidad del Valle
38
Ejemplo
Adaptador
Universidad del Valle
39
Aplicaciones
• Se desea utilizar una clase ya existente pero cuya
interfaz no coincide con la que necesita.
• Se desea crear una clase que colabora con otras
clases que no tienen interfaces compatibles.
• Se desea adaptar varias subclases ya existentes
adaptando la interfaz de su clase padre común
(object adapter).
Adaptador
Universidad del Valle
40
Universidad del Valle
Compuesto
• El patrón Composite permite construir objetoscomplejos componiendo de forma recursiva objetossimilares en una estructura de árbol.
• Permite manipular todos los objetos contenidos en elárbol de una forma uniforme, ya que todos ellosposeen una interfaz común definida en la clase raíz.
• Para representar jerarquías de objetos.
• Para que los clientes puedan ignorar la diferenciaentre los objetos compuestos y los objetos de laestructura de forma uniforme.
Compuesto
Universidad del Valle
42
Estructura
Component. Clase abstractade la que heredan todas lasdemás. Declara la interfaz detodos los objetos de lacomposición. Declara unainterfaz de acceso ymanipulación de loscomponentes hijo.Opcionalmente, define unainterfaz para acceder alpadre de cada componente.
Compuesto
Universidad del Valle
43
Composite. Súper clase quedefine los métodos necesariospara manejar los objetos queagrupa un nodo compuesto.Define el comportamiento delos componentes compuestos.Almacena los hijos. Implementalas operaciones de manejo delos componentes hijos. Losobjetos compuestosnormalmente tratan a losobjetos que contienen comoinstancias de componente.
Compuesto
Universidad del Valle
44
Leaf. Nodo hoja del árbolde objetos a partir de laestructura de clases. Notiene hijos. Define elcomportamiento de losobjetos primitivos delcompuesto.
Client. Maneja los objetosque forman parte delcompuesto decomponentes.
Compuesto
Universidad del Valle
45
Ejemplo
Compuesto
Universidad del Valle
46
Consecuencias
• Se define una jerarquía de objetos hoja y objetoscompuestos que se van componiendo de formarecursiva.
• El cliente se simplifica, ya que trata los objetoshoja y los objetos compuestos de la misma forma.
• La inclusión de nuevas clases hoja o clasescompuestas no modifica la estructura anterior ni elcódigo del cliente.
Compuesto
Universidad del Valle
47
Implementación
public interface Componente{
Compuesto obtenerCompuesto();
}
public class Hoja implements Componente{
public Compuesto obtenerCompuesto()
return null;
}
}
Compuesto
Universidad del Valle
48
public class Compuesto implements Componente{
private Nombre nombre;
private Vector lista;
public Compuesto (String nombre){
nombre = new Nombre(nombre);
lista = new Vector();
}
public void add (Componente componente){
lista.addElement(componente);
}
Compuesto
Universidad del Valle
49
public boolean remove (Componente componente){
return lista.removeElement(componente);
}
public Componente obtenerHijo (int hijo){
return (Componente) lista.elementAt(hijo);
}
public Compuesto obtenerCompuesto(){
return this;
}
}
Compuesto
Universidad del Valle
50
En el paquete swing de Java encontramos:
Componente – Component
Compuesto Abstracto – Container
Compuesto Concreto – JPanel, JDrame, JDialog
Hoja – JLabel, JTextField, JButton
Compuesto
Universidad del Valle
51
GRACIAS
¿…?
Universidad del Valle
Top Related