Sei sulla pagina 1di 22

Diseo de

patrones Builder
-Decorator
PRESENTADO POR:
JULIO CESAR OROZCO
CRISTIAN MENESES

Tabla de contenido

Introduccin al diseo de patrones.

Ventajas de la reutilizacin.

Cuantos patrones tenemos.

Patrn Builder.

Componentes del patrn Builder.

Participantes.

Estructura.

Planteamiento de un problema con la implementacin Builder.

Ejemplo diagrama de clase con Builder.

Ejemplo en java con implementacin Builder.

Diseo de patrn Decorator.

Introduccin al diseo de
patrones.

Por qu se utilizan los Patrones de Diseo?

Principalmente la utilizacin de los patrones ha venido por la escasa


reutilizacin de trabajos en desarrollo de software. Por cuya causa
se han recopilado, y se recopilan, tcnicas que permitan la
reutilizacin en el Desarrollo de Software.

Ventajas de la reutilizacin.

Se abrevia la programacin

Para futuras renovaciones del cdigo, la reutilizacin facilita el


trabajo de mantenimiento

Mejora la fiabilidad

Cuantos patrones tenemos.

Segn: Francisco Jos Bibiloni

Patrn Builder.

El patrn de diseo se usa para crear objetos de una clase en


particular (a la que se refiere como clase Producto), asignando
valores predeterminados a sus atributos.

MOTIVACIN: Nos facilita la construccin de un objeto con una


composicin de ms objetos. El caso habitual es la de construir
una Interfaz de usuario.

Componentes del patrn Builder.

El patrn de diseo Builder se caracteriza por presentar siempre


4 componentes:
- Clase Producto
- Abstract Builder (clase abstracta)
- Concrete Builders (clases concretas, pueden ser varias)
- Director (clase que se encarga de gestionar la creacin de
objetos de la clase Producto)

Participantes.

Builder: Especifica una interfaz abstracta para crear las partes de


un objeto Producto.
ConcreteBuilder:
Construye y ensambla las partes del Producto
Define la Representacin a Crear
Proporciona una interfaz para recuperar el Producto.

Director: El encargado de crear el Objeto Complejo utilizando la


interfaz Builder.
Producto: Representa el Objeto Complejo en Construccin.

ESTRUCTURA:

Planteamiento de un problema
con la implementacin Builder.

Problema:

Un Empresario desea abrir una Pizzera para ventas a


domicilio.
Slo tendr 2 tipos de Pizzas distintas.

Solucin: Sabemos que tendremos lo siguiente:


Builder: PizzaBuilder
Director: Cocina
Producto: Pizza
Concrete Builder: HawaiPizzaBuilder y PicantePizzaBuilder

Diagrama de clase.

Ejemplo en java con


implementacin Builder.

Decorator
Propsito

Permite aadir responsabilidades extra a objetos concretos


de manera dinmica

Proporciona una alternativa flexible a la herencia para


extender funcionalidad

Tambin conocido como wrapper

Decorator
Motivacin

A veces se quiere aadir funcionalidad a un objeto


concreto, no a una clase entera

Ej: Un toolkit para GUIs proporciona soporte para aadir


marcos, barras de desplazamiento... a componentes

Solucin:

Herencia: no es flexible, la funcionalidad se aade


estticamente
Definir una clase decoradora que envuelve al componente, y le
proporciona la funcionalidad adicional requerida: ms flexible,
transparente al cliente, se pueden anidar decoradores

Decorator
Estructura
VisualComponent
draw()

Ejemplo de
componente textual
con scroll y marco:

component

a:BorderDecorator
component

TextView

Decorator

draw()

draw()

b:ScrollDecorator

component.draw();

component
c:TextView

ScrollDecorator

BorderDecorator

- scrollPosition

- borderWidth

draw()
scrollTo()

draw()
drawBorder()

super.draw();
drawBorder();

Decorator
Aplicabilidad

Usa el patrn Decorator:

Para aadir responsabilidades a objetos concretos de


manera dinmica y transparente, esto es, sin afectar
a otros objetos

Para responsabilidades que se pueden aadir y quitar

Cuando la herencia sea impracticable, porque implique


crear mltiples subclases para todas las combinaciones
posibles (ej. TextViewScroll, TextViewScrollBorder, ...)

Decorator
Estructura
Component
operation()

component
1

ConcreteComponent

Decorator

operation()

operation()

ConcreteDecoratorA

component.operation();

ConcreteDecoratorB

- addedState
operation()

operation()
addedBehaviour()

super.operation();
addedBehaviour();

Decorator
Participantes

Component (VisualComponent): define la interfaz de los


objetos a los que se puede aadir responsabilidades de
manera dinmica

ConcreteComponent (TextView): define un objeto al que


aadir responsabilidades de manera dinmica

Decorator: mantiene una referencia al objeto componente


y define una interfaz conforme a la del componente

ConcreteDecorator (BorderDecorator, ScrollDecorator):


aade responsabilidades al componente al que referencia

Decorator
Colaboraciones
:Client
new ()
new (c)

c:ConcreteComponent
:ConcreteDecorator

operation()
operation()

addedBehaviour()

Decorator
Consecuencias

Es ms flexible que la herencia esttica

Las responsabilidades se aaden y eliminan dinmicamente


Facilita definir una propiedad varias veces (ej. doble marco)

Evita que las clases ms altas en la jerarqua estn


demasiado cargadas de funcionalidad y sean
complejas

No hay precio que pagar por propiedades que no se usan


Facilita la definicin de nuevos decoradores

Un decorador y el componente al que se refiere no son


idnticos (esto es, tienen distinto identificador)

Provoca la creacin de muchos objetos pequeos


parecidos y encadenados, complicando la depuracin

Decorator
Implementacin

Un componente y su decorador deben compartir la misma interfaz

Se puede omitir la clase abstracta Decorator si slo se va a definir una


responsabilidad

Mantener una clase Component ligera (definicin de la interfaz, no


almacn de datos). En caso contrario se incrementa la probabilidad de
que las subclases hereden caractersticas que no necesitan

Cul es la diferencia entre Decorator y Strategy?

Strategy: accedo al componente, el componente cambia


Decorator: accedo al decorador, el componente no cambia
:Component

:Decorator

strategy
:Strategy

strategy
:Strategy

component
:Decorator

component
:Component

Decorator
Cdigo de ejemplo
public interface VisualComponent { //
component public void draw();
}
{ // concrete component
public class TextView implements
VisualComponent public void draw () { ... }
}
public abstrac class Decorator implements VisualComponent { //
decorator protected VisualComponent _component;
public Decorator (VisualComponent vc) { _component = vc; }
public void draw () { _component.draw(); }
}
public class BorderDecorator extends Decorator { // concrete
decorator public BorderDecorator (VisualComponent vc)
{ super(vc); }
public void draw() {
super.draw();
drawBorder();
}
public void
drawBorder()
{ ... }
}
public class Test { //
client
public static void main
(String args[]) {
VisualComponent vc = new BorderDecorator(new TextView());
vc.draw();
}
}

Potrebbero piacerti anche