+ All Categories
Home > Documents > Diseño de Patrones Builder Decorator

Diseño de Patrones Builder Decorator

Date post: 07-Jul-2018
Category:
Upload: christianmeneses
View: 217 times
Download: 0 times
Share this document with a friend

of 22

Transcript
  • 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();}}


Recommended