patrones de diseño ii

18
«Promoviendo buenas prácticas de diseño y construcción de software» Profesor: Juan José González Faúndez Curso: Arquitectura y patrones J2EE UNAB 2011 Patrones de diseño II

Upload: jjegonzalezf

Post on 03-Jul-2015

542 views

Category:

Education


0 download

DESCRIPTION

Clase 2

TRANSCRIPT

Page 1: Patrones de diseño II

«Promoviendo buenas prácticas de diseño y construcción de software»

Profesor: Juan José González Faúndez

Curso: Arquitectura y patrones J2EE

UNAB 2011

Patrones de diseño II

Page 2: Patrones de diseño II

Patrones estructurales

• Adapter – Traductor que adapta la interfaz de un servidor a un cliente

• Bridge – Abstracción que vincula a una entre muchas implementaciones

• Composite – Estructura para construir jerarquías basadas en composición

• Decorator – Extender la funcionalidad dinámicamente de modo transparente

• Facade – Definir una interfaz unificada para varios subsistemas

• Flyweight – Compartición eficiente de muchos objetos de grano fino

• Proxy – Proporciona un sustituto de otro objeto para controlar su acceso

Page 3: Patrones de diseño II

Adaptador

• Propósito: Convertir la interfaz de una clase en otra que esperan los clientes. • Otras denominaciones:

– Class Adapter y Object Adapter – Wrapper (Envolvente)

• Motivación – Reutilizar una clase de una biblioteca aunque su interfaz

no correspondiera exactamente con el que requiere una aplicación concreta.

– Para añadir funcionalidad que la clase reutilizada no proporciona

Page 4: Patrones de diseño II

Adaptador

class Class Mo...

Target

+ Request()

Adaptee

+ SpecificRequest()

Adapter

+ Request()

adaptee->SpecificRequest()

Client

-adaptee

Page 5: Patrones de diseño II

Adaptador

• Aplicación – Para usar una clase existente cuya interfaz no se

corresponde con el que se necesita

– Para crear una clase reutilizable que coopera con clases imprevistas (esto es, que no tienen necesariamente interfaces compatibles)

– El adaptador de objeto sólo: para utilizar varias subclases existentes para las que sería poco práctico adaptar su interfaz heredando de cada una. Un adaptador de objeto puede adaptar la interfaz de su clase padre

Page 6: Patrones de diseño II

Adaptador Ejemplo class Class Mo...

«abstract»

Motor

+ acelerar() : void

+ apagar() : void

+ encender() : void

MotorEconomico

+ acelerar() : void

+ apagar() : void

+ encender() : void

MotorOferta

+ acelerar() : void

+ apagar() : void

+ encender() : void

Este motor ya no se

usa tanto

MotorElectrico

+ activar() : void

+ conectar() : void

+ desconectar() : void

+ detener() : void

+ moverMasRapido() : void

Una empresa nos envía

un motor eléctrico.

Como vemos, este

motor hace lo mismo

que el nuestro, pero de

manera y con llamadas

un poco diferentes. ¿

Cómo hacemos para

integrar este

MotorEléctrico al resto

de nuestro sistema? Así

es, con un adaptador o

adapter!

El adapter “envuelve”

al objeto extraño (por

eso le llaman wrapper

también, ya que

wrapper viene siendo

envoltorio).

Page 7: Patrones de diseño II

Adaptador Solución Ejemplo 1 class Class Mo...

«abstract»

Motor

+ acelerar() : void

+ apagar() : void

+ encender() : void

MotorEconomico

+ acelerar() : void

+ apagar() : void

+ encender() : void

MotorOferta

+ acelerar() : void

+ apagar() : void

+ encender() : void

MotorElectrico

+ activar() : void

+ conectar() : void

+ desconectar() : void

+ detener() : void

+ moverMasRapido() : void

MotorElectricoAdapter

- motorElectrico: MotorElectrico

+ acelerar() : void

+ apagar() : void

+ encender() : void

Clase Adaptador

Clase Adaptada

Page 8: Patrones de diseño II

Adaptador Solución Ejemplo 1

• Como ven el adapter se encarga no solo de corregir los nombres de los métodos, sino también de cosas como conectar y desconectar el motor, cosas que a nuestra implementación no le importan. Pero lo más importante es que ahora podemos utilizar esta implementación de Motor en nuestro sistema utilizando la implementación de «ellos». Por ejemplo podemos hacer cosas como esta:

Motor motor = new MotorEconomico(); motor.encender(); motor.acelerar(); motor.apagar(); motor = new MotorOferta(); motor.encender(); motor.acelerar(); motor.apagar(); motor = new MotorElectricoAdapter() ; motor.encender(); motor.acelerar(); motor.apagar();

Page 9: Patrones de diseño II

Patrón Facade

• Provee una interface simple para acceder a subsistemas complejos.

• Motivación:

Page 10: Patrones de diseño II

Patrón Facade

• Aplicabilidad: La interfaz es suficientemente buena para la mayoría de los clientes. Desacoplar las clases del subsistema de los clientes y otros subsistemas. De esta forma promovemos la independencia y la portabilidad.

Page 11: Patrones de diseño II

Patrón Facade

• Estructura:

Page 12: Patrones de diseño II

Patrón Facade

• Beneficios: – Ocultamos la implementación de los subsistemas a los

clientes, haciendo el subsistema fácil de usar. – Promovemos un bajo acoplamiento entre el cliente y

los subsistemas. Podemos realizar cambios en las clases sin comprometer el subsistema.

– Reduce la dependencia de compilación en sistemas grandes.

– Simplifica la portabilidad del sistema hacia otras plataformas.

– Note que el Facade no agrega ninguna funcionalidad, solo simplifica las interfaces.

Page 13: Patrones de diseño II

Patrón Facade

• Un compilador

Page 14: Patrones de diseño II

Patrón Facade

class Class Mo...

Prestamo

Banco

Credito

Hipoteca

- banco: Banco

- credito: Credito

- prestamo: Prestamo

+ EsElegible(int, Cliente) : boolean

Cliente

Page 15: Patrones de diseño II

Patrón Composite

• Componer objetos en estructuras de árbol para representar jerarquías. El patrón Composite permite a los clientes tratar objetos individuales y composiciones de objetos de manera uniforme.

• La aplicación del patrón composite es simple, las clases compuesta extienden de una clase base que representa los objetos primitivos.

Page 16: Patrones de diseño II

Patrón Composite class Class Mo...

Component

+ Add() : Component

+ GetChild() : Component

+ Operation()

+ Remove() : Component

Client

Leaf

+ Operation()

Composite

+ Add() : Component

+ GetChild() : Component

+ Operation()

forall g in children

g.Operation();

+ Remove() : Component

-children

1..*

Page 17: Patrones de diseño II

Patrón Composite class Class Mo...

«abstract»

Menu

+ agregar(Menu) : void

+ eliminar(Menu) : void

+ mostrar(int) : void

CompositeMenu

- elementos: ArrayList

+ agregar(Menu) : void

+ eliminar(Menu) : void

+ mostrar(Menu) : void

+ mostrar(int) : void

MenuElemento

+ agregar(Menu) : void

+ eliminar(Menu) : void

+ mostrar(Menu) : void

+ mostrar(int) : void

Page 18: Patrones de diseño II

Fin parte II