Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase....

18
Patrón Decorador Por: Robin Ochoa Falla

Transcript of Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase....

Page 1: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Patrón Decorador

Por: Robin Ochoa Falla

Page 2: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Objetivos

Agregar responsabilidades menores a una clase.

Añadir responsabilidades a un objeto concreto de forma dinámica, cuando sea imposible la extensión de funcionalidad por herencia, por ser ésta imprevisible en tipo y número

Page 3: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Ejemplo Interfaz Gráfica

Un usuario de herramientas gráficas, por ejemplo, debería añadir propiedades como bordes, scroll bar, a cualquier componente de interfaz.

Page 4: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Primera Solución Interfaz Gráfica Herencia Añadir responsabilidades es con herencia,

heredando un borde de otra clase inserta borde a toda subclase instanciada.

Page 5: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Primera Solución Interfaz Gráfica

Page 6: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Problemas Primera solución

1. No es flexible, pues la elección del borde se hace estáticamente, por lo que el cliente no puede controlar como y cuando decorar el componente con un borde.

2. Si se quiere un componente con borde y deslizadores (por ejemplo) requeriría herencia múltiple además de prever todas las combinaciones factibles lo cual traería explosión combinatoria de clases.

Page 7: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Solución Patrón Decorador

Encerrar el componente en otro objeto que añade el borde.

El objeto que encierra es llamado decorador. El decorador conforma  la interfaz del

componente, éste decora de manera que su presencia sea transparente a los usuarios de los componentes.

Page 8: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Solución Decorador

Page 9: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Diagrama de Clases Patrón decorador Interfaz Gráfica

Page 10: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Funciona

1. Se hace primero la ventana

2. Se van agregando los decoradores o adornos.

La ventaja más inmediata que nos proporciona este patrón es que permite mezclar cualquier  conjunto de decoradores como sea necesario y el cliente lo prefiera.

Page 11: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Diagrama de Clases Patrón Decorador

Page 12: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

PARTES

Componente: Define la interfaz para objetos que pueden tener responsabilidades añadidas a ellos dinámicamente.

Componente concreto: Define un objeto al que pueden ser agregadas responsabilidades adicionales.

Decorador: Mantiene una referencia a un objeto componente y define una interfaz que conforma la interfaz del componente.

Decorador Concreto: Añade responsabilidades al componente.

Page 13: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Ejemplo(1) JAVA

El componente gráfico es un modesto editor de texto: JEditorPane panel_text = new JEditorPane();

Es muy sencillo añadir la funcionalidad del scroll sin usar herencia:

JScrollPane scroll_text = new JScrollPane( panel_text );

El último paso es añadir el decorador (y por añadidura el editor) al contenedor raíz del applet: cont_global.add( scroll_text );

En nuestro ejemplo JEditorPane y JScrollPane heredan de JComponent.

Page 14: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Ejemplo (2)

Page 15: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Ejemplo (3)

Page 16: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Ventajas

Amplia la funcionalidad de una interfaz al tiempo que la mantiene igual y se hace dinámicamente.

No altera la funcionalidad existente, solo añade más funciones.

Las responsabilidades se pueden añadir o quitar.

Page 17: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Desventajas

• Provoca la creación de muchos objetos pequeños encadenados lo que puede llegar a complicar la depuración.

La flexibilidad que provee puede dar problemas, pues da la oportunidad para colocarle muchos deslizadores  y varios   rebordes (por ejemplo), lo que traería como consecuencia que el componente sea poco practico y de baja calidad.

Las responsabilidades pueden ser ejecutadas a tiempo de ejecución.

Puede conducir a la proliferación de clases pequeñas. En algunas ocasiones se puede omitir la clase decorador, en tal

caso el diagrama quedaría de la siguiente  manera:

Page 18: Patrón Decorador Por: Robin Ochoa Falla. Objetivos Agregar responsabilidades menores a una clase. Añadir responsabilidades a un objeto concreto de forma.

Bibliografía

Patrones Estrategía y Decorador (http://www.ldc.usb.ve/~teruel/ci3711/patron2/index.html)

Gamma Erick, Helm Richard, Johnson Ralph, Vlissides John. Design Patterns                Addison-Wesley publishing Company. United States of America. 1995.

         -  Grand Mark.   Patterns in Java Volume 1.                Wiley Computer publishing. United States of America. 1998.