Date post: | 07-Jul-2018 |
Category: |
Documents |
Upload: | christianmeneses |
View: | 217 times |
Download: | 0 times |
of 22
8/18/2019 Diseño de Patrones Builder Decorator
1/22
Diseño de
patrones Builder-Decorator
PRESENTADO POR:
JULIO CESAR OROZCO
CRISTIAN MENESES
8/18/2019 Diseño de Patrones Builder Decorator
2/22
Tabla de contenido
Introducción al die!o de "atrone#
$enta%a de la reutili&ación#
Cuanto "atrone tene'o#
Patrón (uilder#
Co'"onente del "atrón (uilder#
Partici"ante#
Etructura#
Plantea'iento de un "roble'a con la i'"le'entación (uilder#
E%e'"lo dia)ra'a de clae con (uilder#
E%e'"lo en %a*a con i'"le'entación (uilder#
Die!o de "atrón Decorator#
8/18/2019 Diseño de Patrones Builder Decorator
3/22
Introducción al die!o de"atrone# +Por ,u- e utili&an lo Patrone de Die!o.
Princi"al'ente la utili&ación de lo "atrone /a *enido "or la ecareutili&ación de traba%o en dearrollo de o0t1are# Por cu2a caue /an reco"ilado3 2 e reco"ilan3 t-cnica ,ue "er'itan reutili&ación en el Dearrollo de So0t1are#
8/18/2019 Diseño de Patrones Builder Decorator
4/22
$enta%a de la reutili&ación#
4 Se abre*ia la "ro)ra'ación 4 Para 0utura reno*acione del códi)o3 la reutili&ación 0acilita
traba%o de 'anteni'iento
4 Me%ora la 5abilidad
8/18/2019 Diseño de Patrones Builder Decorator
5/22
Cuanto "atrone tene'o#
Se)6n: 7rancico Jo- (ib
8/18/2019 Diseño de Patrones Builder Decorator
6/22
Patrón (uilder#
El "atrón de die!o e ua "ara crear ob%eto de una clae e"articular 8a la ,ue e re5ere co'o clae Producto93 ai)nand*alore "redeter'inado a u atributo#
MOTI$ACIN: No 0acilita la contrucción de un ob%eto con unco'"oición de '; ob%eto# El cao /abitual e la de contruuna Inter0a& de uuario#
8/18/2019 Diseño de Patrones Builder Decorator
7/22
Co'"onente del "atrón (uilder El "atrón de die!o (uilder e caracteri&a "or "reentar ie'"re
< co'"onente:= Clae Producto= Abtract (uilder 8clae abtracta9= Concrete (uilder 8clae concreta3 "ueden er *aria9= Director 8clae ,ue e encar)a de )etionar la creación deob%eto de la clae Producto9
8/18/2019 Diseño de Patrones Builder Decorator
8/22
Partici"ante#
(uilder: E"eci5ca una inter0a& abtracta "ara crear la "arte d
un ob%eto Producto# Concrete(uilder:
Contru2e 2 ena'bla la "arte del Producto
De5ne la Re"reentación a Crear
Pro"orciona una inter0a& "ara recu"erar el Producto#
Director: El encar)ado de crear el Ob%eto Co'"le%o utili&ando lainter0a& (uilder#
Producto: Re"reenta el Ob%eto Co'"le%o en Contrucción#
8/18/2019 Diseño de Patrones Builder Decorator
9/22
ESTRUCTURA:
8/18/2019 Diseño de Patrones Builder Decorator
10/22
Plantea'iento de un "roble'acon la i'"le'entación (uilder#
Proble'a:
4 Un E'"reario deea abrir una Pi&&er>a "ara *enta ado'icilio# Sólo tendr; ? ti"o de Pi&&a ditinta#
Solución: Sabe'o ,ue tendre'o lo i)uiente:
4 (uilder: @Pi&&a(uilder
4 Director: @Cocina4 Producto: @Pi&&a
4 Concrete (uilder: @Ba1aiPi&&a(uilder 2 PicantePi&&a(uilder
8/18/2019 Diseño de Patrones Builder Decorator
11/22
Dia)ra'a de clae#
8/18/2019 Diseño de Patrones Builder Decorator
12/22
E%e'"lo en %a*a coni'"le'entación (uilder#
8/18/2019 Diseño de Patrones Builder Decorator
13/22
DecoratorPropósito
4 Per'ite a!adir re"onabilidade etra a ob%eto concrede 'anera din;'ica
4 Pro"orciona una alternati*a eible a la /erencia "araetender 0uncionalidad
4 Ta'bi-n conocido co'o wrapper
8/18/2019 Diseño de Patrones Builder Decorator
14/22
DecoratorMotivación
4 A veces se quiere añadir funcionalidad a un objetoconcreto, no a una clase entera
4 Ej: Un toolkit para GUIs proporciona soporte para añadirmarcos, barras de desplazamiento... a componentes
4 oluci!n:4
"erencia: no es fle#ible, la funcionalidad se añadeest$ticamente4 %efinir una clase &decoradora' que envuelve al componente, ( le
proporciona la funcionalidad adicional requerida: m$s fle#ible,transparente al cliente, se pueden anidar decoradores
8/18/2019 Diseño de Patrones Builder Decorator
15/22
Decorator
Estructura
draw()
Decorator dra)*+
e#t-ie)
dra)*+ component.dra)*+
VisualComponent component/
c:e#t-ie)
Ejemplo decomponente te#tualcon scroll ( marco:
b:croll%ecorator
component
a:0order%ecorator
component
croll%ecorator 1 scroll2osition
dra)*+
scrollo*+
0order%ecorator 1 border3idt4
dra)*+
dra)0order*+
super.dra)*+
dra)0order*+
8/18/2019 Diseño de Patrones Builder Decorator
16/22
DecoratorAplicabilidad
4
Usa el patr!n Decorator :
4 2ara añadir responsabilidades a objetos concretos demanera din$mica ( transparente, esto es, sin afectara otros objetos
4 2ara responsabilidades que se pueden añadir ( quitar
4 5uando la 4erencia sea impracticable, porque impliquecrear m6ltiples subclases para todas las combinacioneposibles *ej. TextViewScroll , TextViewScrollBorder , ...+
8/18/2019 Diseño de Patrones Builder Decorator
17/22
DecoratorEstructura
Component operation()
Decorator operation*+
5oncrete5omponent
operation*+ component.operation*+
component
/
5oncrete%ecoratorA1 addedtate
operation*+
5oncrete%ecorator0
operation*+added0e4aviour*+
super.operation*+
added0e4aviour*+
8/18/2019 Diseño de Patrones Builder Decorator
18/22
DecoratorParticipantes
4 Component *VisualComponent +: define la interfaz de losobjetos a los que se puede añadir responsabilidades de
manera din$mica
4 ConcreteComponent *TextView +: define un objeto al queañadir responsabilidades de manera din$mica
4 Decorator : mantiene una referencia al objeto component( define una interfaz conforme a la del componente
4 ConcreteDecorator *BorderDecorator , ScrollDecorator +:añade responsabilidades al componente al que referenci
8/18/2019 Diseño de Patrones Builder Decorator
19/22
Decorator
Colaboraciones
:5lient
:5oncrete%ecorator
c:5oncrete5omponent
operation*+
operation*+
added0e4aviour*+
ne) *+
ne) *c+
8/18/2019 Diseño de Patrones Builder Decorator
20/22
DecoratorConsecuencias
4 Es m$s fle#ible que la 4erencia est$tica4 7as responsabilidades se añaden ( eliminan din$micamente4 8acilita definir una propiedad varias veces *ej. doble marco+
4 Evita que las clases m$s altas en la jerarqu9a estndemasiado car;adas de funcionalidad ( seancomplejas4
8/18/2019 Diseño de Patrones Builder Decorator
21/22
DecoratorImplementación
4 Un componente ( su decorador deben compartir la misma interfaz
4 e puede omitir la clase abstracta Decorator si s!lo se va a definir un
responsabilidad
4 =antener una clase Component li;era *definici!n de la interfaz, no
almacn de datos+. En caso contrario se incrementa la probabilidad d
que las subclases 4ereden caracter9sticas que no necesitan
4 >5u$l es la diferencia entre Decorator ( Strategy ?4 trate;(: accedo al componente, el componente cambia4 %ecorator: accedo al decorador, el componente no cambia
:trate;(
:5omponentstrate;(
:trate;(
strate;(:%ecorator
:%ecorator component
:5omponent
component
8/18/2019 Diseño de Patrones Builder Decorator
22/22
Decorator
{ // concrete component
Código de ejemplo
public interface VisualComponent { //component public void draw();
}
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 "orderDecorator extends Decorator { // concretedecorator public "orderDecorator (VisualComponent vc)
{ super(vc); }public void draw() {
super.draw();draw"order();
}public void
draw"order(){ ... }
}public class Test { //
clientpublic static void main
(#trin$ ar$s%&) {
VisualComponent vc ! new "orderDecorator(new TextView());
vc.draw();}}