Trabajo Final Patrones de diseño

download Trabajo Final Patrones de diseño

of 103

Transcript of Trabajo Final Patrones de diseño

  • 7/25/2019 Trabajo Final Patrones de diseo

    1/103

    "Ao de la Diversificacin Productiva y del Fortalecimiento

    de la Educacin"

    UNIVERSIDAD NACIONAL DE PIURAFACULTAD DE INGENIERIA

    INDUSTRIALESCUELA DE INGENIERIA INFORMATICA

    PATRONES DE DISEO

    DOCENTE:

    ING. MOISES SAAVEDRA ARANGO

    ALUMNOS:CALLE GARCIA, Jairo DaroMARCELO MAZA, Marcos Pa!VEGA CAMPOS, Jor"# J$%ior

    TRA&AJO REALIZADO EN EL AREA DISEO DE SISTEMAS

    PIURA ' ()*+

    Introduccin

    Los patrones de diseo son la base para la bsqueda de soluciones a problemas

    comunes en el desarrollo desoftwarey otros mbitos referentes al diseo de

    interaccin o interfaces.

    Un patrn de diseo resulta ser una solucin a un problema de diseo. Para que

    una solucin sea considerada un patrn debe poseer ciertas caractersticas. Una de

    ellas es que debe haber comprobado su efectividad resolviendo problemas

    similares en ocasiones anteriores. tra es que debe ser reutili!able" lo que

    si#nifica que es aplicable a diferentes problemas de diseo en distintascircunstancias.

    http://es.wikipedia.org/wiki/Softwarehttp://es.wikipedia.org/wiki/Softwarehttp://es.wikipedia.org/wiki/Software
  • 7/25/2019 Trabajo Final Patrones de diseo

    2/103

    Patrones de diseoUn patrn de diseo constituye una solucin a un problema de diseo recurrente enpro#ramacin orientada a ob$etos. %e define por & elementos esenciales'

    Un nombre de patrnque representa el problema y su solucin en t(rminos deuna o dos palabras.

    )l problema describir cuando aplicar el patrn. )*plica el problema y suconte*to.

    La solucindescribe los elementos que participan en el diseo" sus relaciones"

    responsabilidades y colaboraciones.

    Las consecuenciase*plican los resultados de aplicar el patrn" sus costes ybeneficios. + trav(s de ellas se podr evaluar cmo se adecua el patrn a nuestroproblema frente a otras alternativas.

    Los patrones estn concebidos como diseos orientados a ob$etos" donde se identificanclases e instancias" sus roles y colaboraciones" describen la distribucin deresponsabilidades. Usar un len#ua$e orientado a ob$etos nos permitir aplicar eimplementar los patrones" ya que estos len#ua$es nos darn el soporte necesario" aunque

    hay que hacer constar que la implementacin podr variar notablemente se#n ellen#ua$e que usemos.

  • 7/25/2019 Trabajo Final Patrones de diseo

    3/103

    Objetivos'

    Proporcionar catlo#os de elementos reusables en el diseo de sistemas

    software.

    )vitar la reiteracin en la bsqueda de soluciones a problemas ya conocidos y

    solucionados anteriormente.

    ,ormali!ar un vocabulario comn entre diseadores.

    )standari!ar el modo en que se reali!a el diseo.

    ,acilitar el aprendi!a$e de las nuevas #eneraciones de diseadores condensando

    conocimiento ya e*istente.+simismo" no pretenden'

    -mponer ciertas alternativas de diseo frente a otras.

    )liminar la creatividad inherente al proceso de diseo.

    o es obli#atorio utili!ar los patrones" solo es aconse$able en el caso de tener el mismo

    problema o similar que soluciona el patrn" siempre teniendo en cuenta que en un caso

    particular puede no ser aplicable. /+busar o for!ar el uso de los patrones puede ser un

    error/.

    Patrones creacionales)l ob$etivo es la abstraccin de los mecanismos de creacin de ob$etos. Los mecanismosde instanciacin de clases concretas se encapsulan en los patrones. )n el caso de que semodifique el con$unto de clases concretas a instanciar" las modificaciones necesarias enel sistema sern mnimas o ine*istentes.Los patrones de construccin tienen la vocacin de abstraer los mecanismos de creacinde ob$etos. Un sistema que utilice estos patrones se vuelve independiente de la forma enque se crean los ob$etos" en particular" de los mecanismos de instanciacin de las clasesconcretas.)stos patrones encapsulan el uso de clases concretas y favorecen as el uso de lasinterfaces en las relaciones entre ob$etos" aumentando las capacidades de abstraccin enel diseo #lobal del sistema.

    Factory Metod!

    0entrali!a en una clase constructora la creacin de ob$etos de un subtipo de untipo determinado" ocultando al usuario la casustica" es decir" la diversidad decasos particulares que se pueden prever" para ele#ir el subtipo que crear. Partedel principio de que las subclases determinan la clase a implementar.+ continuacin se presenta el cdi#o fuente del e$emplo reali!ado en clase'

  • 7/25/2019 Trabajo Final Patrones de diseo

    4/103

    Arcivojava

    public interface +rchivo 1 public void crear2345Arcivo#$tjava

    public class +rchivo6*t implements +rchivo1 public void crear231 %ystem.out.println2/0reando archivo de te*to plano/34 55Arcivo%mljava

    public class +rchivo7ml implements +rchivo1 public void crear231 %ystem.out.println2/0reando archivo 78L/34 55&readorArcivojava

    public class 0reador+rchivo 1public static +rchivo crear+rchivo2%trin# descriptor3 throws )*ception1

    if 2/+rchivo7ml/.equals2descriptor33 1 return new +rchivo7ml234 5 else if 2/+rchivo6*t/.equals2descriptor33

    1 return new +rchivo6*t234 5 else1 throw new )*ception2/6ipo de archivo no encontrado/34 5 5

    5Principaljava

    public class Principal 1

    public static void main2%trin#9: ar#s3 1 try 1 +rchivo6*t archivo6*t ; 2+rchivo6*t3

    0reador+rchivo.crear+rchivo2/+rchivo6*t/34 archivo6*t.crear234 +rchivo7ml archivo7ml ; 2+rchivo7ml30reador+rchivo.crear+rchivo2/+rchivo7ml/34 archivo7ml.crear234 5 catch 2)*ception e3 1 %ystem.out.println2e.#et8essa#e2334 5 55+ continuacin al#unos e$emplos de este patrn

    Ejemplo'

  • 7/25/2019 Trabajo Final Patrones de diseo

    5/103

    &di(o fuente

    &lientejava

    import $ava.util. pedidos ; new +rrayList=Pedido>234

    protected abstract Pedido creaPedido2double importe34

    public void nuevoPedido2double importe3 1 Pedido pedido ;this.creaPedido2importe34 if2pedido.valida233 1 pedido.pa#a234 pedidos.add2pedido34 5 5

    5&liente&ontadojava

    public class 0liente0ontado e*tends 0liente1 ?verride protected Pedido creaPedido2double importe3 1 return new Pedido0ontado2importe34 55&liente&reditojava

    public class 0liente0redito e*tends 0liente1

    PedidoCredito

    +paga()+valida(): boolean

    PedidoContado

    +paga()+valida(): boolean

    Pedido

    +importe: double

    +paga()+valida(): boolean

    ClienteCredito

    +crearPedido(importe: double): Pedido

    ClienteContado

    +crearPedido(importe: double): Pedido

    Cliente

    +pedidos: List

    +crearPedido(importe: double): Pedido+nuevoPedido(importe: double)

  • 7/25/2019 Trabajo Final Patrones de diseo

    6/103

    ?verride protected Pedido creaPedido2double importe3 1 return new Pedido0redito2importe34 5

    5Pedidojava

    public abstract class Pedido 1

    protected double importe4

    public Pedido2double importe3 1 this.importe ; importe4 5

    public abstract boolean valida234

    public abstract void pa#a2345Pedido&ontadojava

    public class Pedido0ontado e*tends Pedido 1 public Pedido0ontado2double importe3 1 super2importe34 5

    ?verride public void pa#a23 1 %ystem.out.println2/ )l pa#o del pedido por importe de ' /@ importe @/ se ha reali!ado./34 5

    ?verride public boolean valida23 1 return true4

    55Pedido&reditojava

    public class Pedido0redito e*tends Pedido1 public Pedido0redito2double importe3 1 super2importe34 5

    ?verride

    public void pa#a23 1

  • 7/25/2019 Trabajo Final Patrones de diseo

    7/103

    %ystem.out.println2/)l pa#o del pedido a credito de ' /@ importe @/se ha reali!ado./34 5

    ?verride

    public boolean valida23 1 return 2importe >;ABBB.B3CC2importe =;DBBB.B34

    55)suariojava

    public class Usuario1 public static void main2%trin#9: ar#s3 1 0liente cliente4

    cliente; new 0liente0ontado234 cliente.nuevoPedido2EBBB.B34 cliente.nuevoPedido2ABBBB.B34 cliente;new 0liente0redito234 cliente.nuevoPedido2EBBB.B34 cliente.nuevoPedido2ABBBB.B34 55

    +l e$ecutar el cdi#o obtenemos

    Ejemplo*

    &alculadorajava

    public class 0alculadora 1

    public static peraciones perar2double opcion3 1

    peraciones operaciones4 if 2opcion ;; A3 1

    Calculadora

    +operar(opcion: double): Operaciones

    Division

    +t: Scanner

    +Calcular(): double

    Multiplicacion

    +t: Scanner

    +Calcular(): double

    Suma

    +t: Scanner

    +Calcular(): double

    Resta

    +t: Scanner

    +Calcular(): double

    Operaciones

    +Calcular(): double

  • 7/25/2019 Trabajo Final Patrones de diseo

    8/103

    operaciones ; new %uma234 return operaciones4 5 if 2opcion ;; E3 1 operaciones ; new Festa234

    return operaciones4 5 if 2opcion ;; G3 1 operaciones ; new 8ultiplicacion234 return operaciones4 5 if 2opcion ;; &3 1 operaciones ; new Hivision234 return operaciones4 5 if 2opcion ;; D3 1

    %ystem.e*it2B34 5II elifse return null4 return null4 5

    5Operacionesjava

    public interface peraciones 1public double 0alcular234

    5Divisionjava

    import $ava.util.%canner4

    public class Hivision implements peraciones1 %canner t;new %canner2%ystem.in34 ?verride public double 0alcular23 1 double div4 %ystem.out.println2/in#rese el primer numero/34

    double a; t.ne*tHouble234

    %ystem.out.println2/in#rese el se#undo numero/34 double b;t.ne*tHouble234 if2b;;B31 %ystem.out.println2/no e*iste division entre B/34 5

    return div;aIb4 55Multiplicacionjava

    import $ava.util.%canner4

    public class 8ultiplicacion implements peraciones 1 %canner t;new %canner2%ystem.in34

  • 7/25/2019 Trabajo Final Patrones de diseo

    9/103

    ?verride public double 0alcular23 1 double multA4 %ystem.out.println2/in#rese el primer numero/34

    double a; t.ne*tHouble234

    %ystem.out.println2/in#rese el se#undo numero/34 double b;t.ne*tHouble234 multA;ab31 resta;aJb45 else resta;bJa4 return resta4 55,umajava

    import $ava.util.%canner4

    public class %uma implements peraciones1 %canner t;new %canner2%ystem.in34 ?verride public double 0alcular23 1 double suma4 %ystem.out.println2/Kue numeros desea sumar/34

    %ystem.out.print2/in#rese el primer numero ' /34double a; t.ne*tHouble234 %ystem.out.print2/in#rese el se#undo numero ' /34 double b;t.ne*tHouble234 suma;a@b4

    %ystem.out.print2/la suma es ' /34 return suma4 55&alcularjava

    import $ava.util.%canner4

  • 7/25/2019 Trabajo Final Patrones de diseo

    10/103

    public class 0alcular 1 public static void main2%trin#9: ar#s3 1 %canner t; new %canner2%ystem.in34 double opcion4

    do 1 %ystem.out.println2/Kue P)F+0- H)%)+ 0+L0UL+F/34 %ystem.out.println2/AJ%U8+/34 %ystem.out.println2/EJF)%6+/34 %ystem.out.println2/GJ8UL6-PL-0+0-/34 %ystem.out.println2/&JH--%-/34 %ystem.out.println2/DJ%+L-F/34 opcion;t.ne*tHouble234 peraciones operaciones ; 0alculadora.perar2opcion34 %ystem.out.println2operaciones.0alcular2334 5 while 2opcion M;D34

    55+l e$ecutar el cdi#o tenemos

    Abstract Factory :

    Permite traba$ar con ob$etos de distintas familias de manera que las familias nose me!clen entre s y haciendo transparente el tipo de familia concreta que seest( usando. )l problema a solucionar por este patrn es el de crear diferentesfamilias de ob$etos" como por e$emplo la creacin de interfaces #rficas dedistintos tipos 2ventana" men" botn" etc3.

    + continucion se muestra el cdi#o fuente del e$emplo hecho en claseArcivojava

    public interface +rchivo 1 public void crear2345Arcivo#$tjava

    public class +rchivo6*t implements +rchivo1 public void crear231 %ystem.out.println2/0reando archivo de te*to plano/34 55Arcivo%mljava

    public class +rchivo7ml implements +rchivo1

  • 7/25/2019 Trabajo Final Patrones de diseo

    11/103

    public void crear231 %ystem.out.println2/0reando archivo 78L/34 55&readorArcivojava

    public abstract class 0reador+rchivo 1 public abstract +rchivo crear+rchivo2345&readorArcivo#$tjava

    public class 0reador+rchivo6*t e*tends 0reador+rchivo1 public +rchivo crear+rchivo231 return new +rchivo6*t234 55&readorArcivo%mljava

    public class 0reador+rchivo7ml e*tends 0reador+rchivo1

    public +rchivo crear+rchivo231 return new +rchivo7ml234 55Principaljava

    public class Principal 1 public static void main2%trin#9: ar#s3 1 0reador+rchivo fabrica ; new 0reador+rchivo6*t234 +rchivo6*t archivo6*t; 2+rchivo6*t3fabrica.crear+rchivo234 archivo6*t.crear234 fabrica ; new 0reador+rchivo7ml234 +rchivo7ml archivo7ml; 2+rchivo7ml3fabrica.crear+rchivo234 archivo7ml.crear234

    55

    + continuacin e$emplos de este patrnEjemplo'

  • 7/25/2019 Trabajo Final Patrones de diseo

    12/103

    &readorFactoryjava

    public interface 0reador,actory 1

    Producto crearProducto2345

    &amisetaFactoryjavapublic class 0amiseta,actory implements 0reador,actory 1

    ?verride public Producto crearProducto23 1 0amiseta pf ; new 0amiseta234 return pf4 55ProductoFactoryjava

    public class Producto,actory 1

    public static void crearProducto20reador,actory pf3 1

    principal

    +main(args: String [)

    Camiseta

    +get!scripcion(): String+getPrecio(): int

    CamisetaFactory

    +crearProducto(): Producto

    CreadorFactory

    +crearProducto(): Producto

    Producto

    +get!escripcion(): String+getPrecio(): int

    ProductoFactory

    +crearProducto(pf: Creador"actor#)

    Zapatilla

    +get!escripcion(): String+getPrecio(): int

    ZapatillaFactory

    +creaProducto(): Producto

  • 7/25/2019 Trabajo Final Patrones de diseo

    13/103

    Producto producto ; pf.crearProducto234 %ystem.out.print2/0reando' / @ producto.#etHescripcion23 @ / / @/el precio del producto es/ @ /Nn/ @ producto.#etPrecio23 @ /soles/ @/Nn/34

    5

    5-apatillaFactoryjava

    public class Oapatilla,actory implements 0reador,actory 1

    ?verride public Producto crearProducto23 1 Oapatilla pf ; new Oapatilla234 return pf4 55&amisetajava

    public class 0amiseta implements Producto 1

    ?verride public int #etPrecio23 1 return AD4 5

    ?verride public %trin# #etHescripcion23 1 return #et0lass23.#etame234 55-apatillajava

    public class Oapatilla implements Producto 1 ?verride public int #etPrecio23 1 return AEB4 5

    ?verride public %trin# #etHescripcion23 1

    return /el producto/ @ /Nn/ @ #et0lass23.#et0anonicalame23.intern234 55Productojava

    public interface Producto 1

    int #etPrecio234

    %trin# #etHescripcion2345

    Principaljavapublic class Principal 1

  • 7/25/2019 Trabajo Final Patrones de diseo

    14/103

    public static void main2%trin#9: ar#s3 1 Oapatilla,actory pf ; new Oapatilla,actory234 Producto,actory.crearProducto2pf34 5

    5+l e$ecutar el pro#rama obtenemos

    Ejemplo*

    &di(o Fuente

    ,ervicioFactoryjava

    public interface %ervicio,actory 1 public %ervicio0arpinteria crear%ervicio2345EscritFactoryjava

    public class )scrit,actory implements %ervicio,actory 1

    ?verride public %ervicio0arpinteria crear%ervicio23 1

    Principal

    $S: Scanner % ne& Scanner(S#stem'in)

    +usarServicio(factor#: Servicio"actor#)+preguntarServicio(): int+main(args: String[)

    EscritFactory

    +crearServicio(): ServicioCarpinteria

    MueblesFactory

    +crearServicio(): ServicioCarpinteria

    SerPuFactory

    +crearServicio(): ServicioCarpinteria

    ServicioCarpinteria

    +asignarrabao()+indicar"ec*antrega()+informarSobrePago()

    ServicioFactory

    +crearServicio(): ServicioCarpinteria+CreateProduct()

    Servicio_Escritoriopc

    +asignarrabao()+indicar"ec*antrega()+informarSobrePago()

    Servicio_Muebleria

    +asignarrabao()+indicar"ec*antrega()+informarSobrePago()

    Servicio_Puerta

    +asignarrabao()+indicar"ec*antrega()+informarSobrePago()

  • 7/25/2019 Trabajo Final Patrones de diseo

    15/103

    return new %ervicio)scritoriospc234 55MueblesFactoryjava

    public class 8uebles,actory implements %ervicio,actory 1

    ?verride public %ervicio0arpinteria crear%ervicio23 1 return new %ervicio8uebleria234 55,erPuFactoryjava

    public class %erPu,actory implements %ervicio,actory1 ?verride public %ervicio0arpinteria crear%ervicio23 1 return new %erviciopuertas234 5

    5,ervicio.Escritoriospcjava

    public class %ervicio)scritoriospc implements %ervicio0arpinteria1 ?verride public void asi#nar6raba$o23 1 %ystem.out.println2/)l personal encar#ado confeccion de )scritorios paraha aceptado el traba$o./34 5

    ?verride public void indicar,echa)ntre#a23 1 %ystem.out.println2/La ,echa de entre#a es EQIB&IEBAD./34 5

    ?verride public void informar%obrePa#o23 1 %ystem.out.println2/)l monto a pa#ar incluye el pa#o por pintado ydetalles./34 55,ervicio.Muebleriajava

    public class %ervicio8uebleria implements %ervicio0arpinteria 1 ?verride public void asi#nar6raba$o23 1 %ystem.out.println2/uestros )*pertos en muebles han sido informados deltraba$o + reali!ar./34 5

    ?verride public void indicar,echa)ntre#a23 1 %ystem.out.println2/%e ha fi$ado como fecha de entre#a el daEDIBGIEBAD./34

    5

  • 7/25/2019 Trabajo Final Patrones de diseo

    16/103

    ?verride public void informar%obrePa#o23 1 %ystem.out.println2/)l monto a pa#ar ser ADBB por los cuatro mueblesconfeccionados y se hara en efectivo el dia de la entre#a./34 5

    5,ervicio.puertasjava

    public class %erviciopuertas implements %ervicio0arpinteria1 ?verride public void asi#nar6raba$o23 1 %ystem.out.println2/)l traba$ado ha sido asi#nado a uestros 0arpinterosdisponibles./34 5

    ?verride public void indicar,echa)ntre#a23 1

    %ystem.out.println2/)llos han determinado ir el dia A&IBEIAD ha reali!ar eltraba$o el traba$o./34 5

    ?verride public void informar%obrePa#o23 1 %ystem.out.println2/Hebe reali!ar el pa#o en efectivo al momento determinar la instalacion de su puerta./34 5,ervicio&arpinteriajava

    public interface %ervicio0arpinteria 1 public void asi#nar6raba$o234 public void indicar,echa)ntre#a234 public void informar%obrePa#o2345Principaljava

    import $ava.util.%canner4

    public class Principal 1

    private static %canner % ; new %canner2%ystem.in34

    public static void main2%trin#9: ar#s3 1 int o4 do1 o ; pre#untar%ervicio234 switch2o3 1 case A' usar%ervicio2new %erPu,actory2334 breaR4 case E' usar%ervicio2new 8uebles,actory2334

    breaR4 case G'

  • 7/25/2019 Trabajo Final Patrones de diseo

    17/103

    usar%ervicio2new )scrit,actory2334 breaR4 case &' %ystem.out.println2/0errando pro#rama./34 breaR4

    default' %ystem.out.println2/%e ha in#resado una opcin invlida./34 5 %ystem.out.print2/Nn/34 5while2oM;&34 5

    public static void usar%ervicio2%ervicio,actory factory3 1 %ervicio0arpinteria servicio ; factory.crear%ervicio234 servicio.asi#nar6raba$o234 servicio.indicar,echa)ntre#a234

    servicio.informar%obrePa#o234 5

    public static int pre#untar%ervicio23 1 %ystem.out.print2 /S-)S)-H% + 0+FP-6)F-+ T+.%+0Nn/@ /

  • 7/25/2019 Trabajo Final Patrones de diseo

    18/103

    clonacin.)ste patrn especifica la clase de ob$etos a crear mediante la clonacin de un

    prototipo que es una instancia ya creada. La clase de los ob$etos que servirn deprototipo deber incluir en su interfa! la manera de solicitar una copia" que serdesarrollada lue#o por las clases concretas de prototipos.

    )n clase observamos el si#uiente e$emplo mostrado en el diar#ama'

    Lo que hace es hacer una copia convalor entre ob$etos de una clase.0di#o fuente de e$mplo en clase'Productojavaimport $ava.io.%eriali!able4

    public class Producto implements 0loneable 1

    private %trin# descripcion4 private double precio4 private double stocR4

    ?verride public Producto clone23 throws 0loneot%upported)*ception 1 return 2Producto3 super.clone234IIcopia por valor dentro de los ob$etos enuna misma clase 5

    public Producto23 1

    5

    public Producto2%trin# descripcion" double precio" double stocR3 1 this.descripcion ; descripcion4

    this.precio ; precio4 this.stocR ; stocR4 5

    public %trin# #etHescripcion23 1 return descripcion4 5

    public double #etPrecio23 1 return precio4 5

    public double #et%tocR23 1

    producto

    $descripcion: String$precio: double$stoc,: double

    +Producto()+Producto(descripcion: String- precio: double- stoc,: double)+get!escripcion(): String+getPrecio(): double+getStoc,(): double+set!escripcion(descripcion: String)+setPrecio(precio: double)+setStoc,(stoc,: double)+Clone()

  • 7/25/2019 Trabajo Final Patrones de diseo

    19/103

    return stocR4 5

    public void setHescripcion2%trin# descripcion3 1 this.descripcion ; descripcion4

    5

    public void setPrecio2double precio3 1 this.precio ; precio4 5

    public void set%tocR2double stocR3 1 this.stocR ; stocR4 55Principaljava

    public class Principal 1

    public static void main2%trin#9: ar#s3 1 try 1 Producto productoA ; new Producto2/0ereal/" &" EB34 Producto productoE ; productoA4IIasi#na referencias %ystem.out.println2productoA34 %ystem.out.println2productoE34 %ystem.out.println2productoA.#etHescripcion2334 %ystem.out.println2productoE.#etHescripcion2334 Producto productoG ; new Producto2/Heter#ente/" G" &B34 Producto producto& ; productoG.clone234 %ystem.out.println2productoG34 %ystem.out.println2producto&34 %ystem.out.println2productoG.#etHescripcion2334 %ystem.out.println2producto&.#etHescripcion2334 5 catch 2)*ception e3 1 %ystem.out.println2e.#et8essa#e2334 5 55

    +qu mostraremos los dia#ramas de clases de E e$emplos'Ejemplo'

  • 7/25/2019 Trabajo Final Patrones de diseo

    20/103

    0di#o fuente

    /estorEnemi(ojava

    import $ava.util.Washtable4

    public class Xestor)nemi#o1

    private Washtable h)nemi#os ; new Washtable234

    public Xestor)nemi#o23 1)nemi#o hA ; new Wechicero234

    hA.setombre2/%orcererA/34 this.add)nemi#o2 hA.#etombre23" hA 34 )nemi#o #A ; new Xuerrero234 #A.setombre2/YarriorA/34

    #A.set+rma2/)%P+H+/34this.add)nemi#o2 #A.#etombre23" #A 34

    5 public void add)nemi#o2 %trin# nombre" )nemi#o ob$)nemi#o 3 1 this.h)nemi#os.put2 nombre" ob$)nemi#o 34 5

    public )nemi#o #et)nemi#o2 %trin# nombre 3 1 )nemi#o ob$Prototipo ; 2Xuerrero3 h)nemi#os.#et2 nombre 34

    return ob$Prototipo4 5

    public )nemi#o #et0lon2 %trin# nombre 3 1 )nemi#o ob$Prototipo ; 2Xuerrero3 h)nemi#os.#et2 nombre 34 return 2)nemi#o3 ob$Prototipo.clonar234 5

    5Enemi(ojava

    public abstract class )nemi#o1 private %trin# nombre ;//4 private %trin# arma ; /H+X+/4

    public %trin# #etombre23 1 return this.nombre4

    Enemigo

    $nombre % //: String$arma % /!.0./: String

    +get1ombre(): String+set1ombre(nombre String)+get.rma(): String+set.rma(arma: String)

    +clonar(): nemigo+atacar(): abstract+detener(): abstract+Operation2()

    GestorEnemigo

    $*enemigos: 3as*table

    +0estornemigo()+addnemigo(nombre: String- obnemigo: nemigo)+getClon(nombre: String): nemigo+getClon(nombre: String): nemigo

    Guerrero

    +0uerrero()+atacar()+detener()+clonar(): nemigo

    Hecicero

    +3ec*icero()+atacar()+detener()+clonar(): nemigo

  • 7/25/2019 Trabajo Final Patrones de diseo

    21/103

    5public void setombre2 %trin# nombre3 1

    this.nombre ; nombre4 5

    public %trin# #et+rma23 1

    return this.arma4 5

    public void set+rma2 %trin# arma3 1 this.arma ; arma4 5

    public abstract )nemi#o clonar234

    public abstract void atacar234 public abstract void detener234

    5/uerrerojava

    public class Xuerrero e*tends )nemi#o1 public Xuerrero23 1 %ystem.out.println2/Xuerrero creado/34 5 ?verride public void atacar23 1 %ystem.out.println2/)l #uerrero ataca/34 5

    ?verride public void detener23 1 %ystem.out.println2/)l #uerrero se detiene/34 5 ?verride public )nemi#o clonar23

    1 Xuerrero ob$Xuerrero ; new Xuerrero234

    ob$Xuerrero.setombre2 this.#etombre23 34 ob$Xuerrero.set+rma2 this.#et+rma23 34

    return ob$Xuerrero4 550ecicerojava

    public class Wechicero e*tends )nemi#o1 public Wechicero23 1 %ystem.out.println2/Wechicero creado/34

    5 ?verride

  • 7/25/2019 Trabajo Final Patrones de diseo

    22/103

    public void atacar23 1 %ystem.out.println2/)l hechicero ataca/34 5 ?verride public void detener23 1

    %ystem.out.println2/)l hechiero se detiene/34 5?verride

    public )nemi#o clonar231

    Wechicero ob$Wechicero ; new Wechicero234

    ob$Wechicero.setombre2 this.#etombre23 34 ob$Wechicero.set+rma2 this.#et+rma23 34

    return ob$Wechicero4

    55Mainjava

    public class 8ain1 public static void main2%trin#9: ar#s3

    1Xestor)nemi#o ob$XP ; new Xestor)nemi#o234

    II btenemos el Xuerrero ori#inal

    )nemi#o #A ; ob$XP.#et)nemi#o2/YarriorA/34

    %ystem.out.println2/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/34

    II 8ostramos su datos %ystem.out.println2/)l Xuerrero ori#inal se llama 9/ @ #A.#etombre23 @

    /:/34 %ystem.out.println2/%u arma es 9/ @ #A.#et+rma23 @ /:/34

    %ystem.out.println2/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/34

    II btener un se#undo Xuerrero 2clon del anterior3 )nemi#o #E ; ob$XP.#et0lon2/YarriorA/34

    II 8ostrar los datos 2ambos tienen datos similares3 %ystem.out.println2/0lon del Xuerrero creado'/34 %ystem.out.println2/%u nombre es 9/ @ #E.#etombre23 @ /:/34 %ystem.out.println2/%u arma es 9/ @ #E.#et+rma23 @ /:/34

    %ystem.out.println2/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/34

    II 8odificamos el Xuerrero clonado

    #E.setombre2/YarriorE/34 #E.set+rma2/W+0W+/34

  • 7/25/2019 Trabajo Final Patrones de diseo

    23/103

    II 8ostrar los datos de ambos Xuerreros 2ambos tienen diferentes datos3

    %ystem.out.println2/6ras modificar el clon" ahora se llama 9/ @#E.#etombre23 @ /:/34

    %ystem.out.println2/%u arma es 9/ @ #E.#et+rma23 @ /:Nn/34

    %ystem.out.println2/)l nombre del Xuerrero ori#inal es 9/ @#A.#etombre23 @ /:/34

    %ystem.out.println2/%u arma es 9/ @ #A.#et+rma23 @ /:/34

    %ystem.out.println2/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/34

    II 8odificamos el Xuerrero ori#inal #A.setombre2/YarriorJA/34 #A.set+rma2/8+O+/34

    II 8ostrar los datos de ambos Xuerreros tras la modificacin 2ambostienen diferentes datos3%ystem.out.println2/6ras modificar el ori#inal" ahora es 9/ @ #A.#etombre23@ /:/34

    %ystem.out.println2/%u arma es 9/ @ #A.#et+rma23 @ /:Nn/34

    %ystem.out.println2/)l nombre del clon es 9/ @ #E.#etombre23 @ /:/34 %ystem.out.println2/%u arma es 9/ @ #E.#et+rma23 @ /:/34

    55Fesultado del cdi#o

    Ejemplo*

  • 7/25/2019 Trabajo Final Patrones de diseo

    24/103

    &di(o fuente

    Documentacionjava

    import $ava.util. documentos4

    public List=Hocumento> #etHocumentos231return documentos4

    55Documentacion&lientejava

    import $ava.util.234Hocumentacion)nSlanco documentacion)nSlanco ;Hocumentacion)nSlanco.-nstance234List=Hocumento> documentos)nSlanco ;

    documentacion)nSlanco.#etHocumentos234for 2Hocumento documento' documentos)nSlanco31Hocumento copiaHocumento ; documento.duplica234copiaHocumento.rellena2informacion34documentos.add2copiaHocumento34

    55

    public void visuali!a231for 2Hocumento documento' documentos3documento.visuali!a234

    5

  • 7/25/2019 Trabajo Final Patrones de diseo

    25/103

    public void imprime231for 2Hocumento documento' documentos3documento.imprime234

    55DocumentacionEn1lancojava

    import $ava.util.2345

    public static Hocumentacion)nSlanco -nstance231if 2instance ;; null3instance ; new Hocumentacion)nSlanco234return instance4

    5

    public void incluye2Hocumento doc31documentos.add2doc34

    5

    public void e*cluye2Hocumento doc31documentos.remove2doc34

    55Documentojava

    public abstract class Hocumento implements 0loneable 1protected %trin# contenido ; new %trin#234

    public Hocumento duplica23 1Hocumento resultado4

    try1resultado ; 2Hocumento3this.clone234

    5catch 20loneot%upported)*ception e*ception31return null4

    5

    return resultado45

    public void rellena2%trin# informacion3 1contenido ; informacion4

    5

    public abstract void imprime234public abstract void visuali!a234

    5&ertificado&esionjava

    public class 0ertificado0esion e*tends Hocumento1public void visuali!a231

  • 7/25/2019 Trabajo Final Patrones de diseo

    26/103

    %ystem.out.println2/8uestra el certificado de cesion' / @ contenido345

    public void imprime231%ystem.out.println2/-mprime el certificado de cesion' / @ contenido34

    55OrdenDePedidojava

    public class rdenHePedido e*tends Hocumento 1public void visuali!a231

    %ystem.out.println2/8uestra la orden de pedido' / @ contenido345

    public void imprime231%ystem.out.println2/-mprime la orden de pedido' / @contenido34

    55,olicitudMatriculacionjava

    public class %olicitud8atriculacion e*tends Hocumento 1public void visuali!a231

    %ystem.out.println2/8uestra la solicitud de matriculacion' / @contenido34

    5public void imprime231

    %ystem.out.println2/-mprime la solicitud de matriculacion' / @contenido34

    55Mainjava

    public class Usuario 1public static void main2%trin#9: ar#s31

    IIiniciali!acion de la documentacion en blancoHocumentacion)nSlanco documentacion)nSlanco ;Hocumentacion)nSlanco.-nstance234

    documentacion)nSlanco.incluye2new rdenHePedido2334documentacion)nSlanco.incluye2new 0ertificado0esion2334documentacion)nSlanco.incluye2new %olicitud8atriculacion2334II creacion de documentacion nueva para dos clientes

    Hocumentacion0liente documentacion0lienteA ; newHocumentacion0liente2/8artin/34Hocumentacion0liente documentacion0lienteE ; newHocumentacion0liente2/%imon/34documentacion0lienteA.visuali!a234documentacion0lienteE.visuali!a234

    55

    +l e$ecutar el cdi#o obtenemos

  • 7/25/2019 Trabajo Final Patrones de diseo

    27/103

    ,in(leton !

    6iene como ob$etivo ase#urar que una clase slo posee una instancia yproporcionar un m(todo de clase nico que devuelva esta instancia.Xaranti!a la e*istencia de una nica instancia para una clase y la creacin de unmecanismo de acceso #lobal a dicha instancia. Festrin#e la instanciacin de unaclase o valor de un tipo a un solo ob$eto. Para ase#urar que la clase no puede serinstanciada nuevamente se re#ula el alcance del constructor 2con atributos como

    prote#ido o privado3.Las situaciones ms habituales de aplicacin de este patrn son aquellas en lasque dicha clase controla el acceso a un recurso fsico nico o cuando cierto tipode datos debe estar disponible para todos los dems ob$etos de la aplicacin.)n clase observamos el si#uiente e$emplo mostrado en su dia#rama de clase'

    )n este e$emplo nos permitecrear una nica instancia en el diseo"creando un ob$eto para todas lasclases.0di#o fuente del e$emplo visto en clase'&lasejava

    public class 0lase 1 private static 0lase instancia;null4 public int numero4 private 0lase231

    5

    public static 0lase #et-nstancia231 if 2instancia;;null3 1 instancia;new 0lase234 5 return instancia4 5 public int #etumero231 return numero4 5 public void setumero2int numero31 this.numero;numero4

    Singleton

    +instance % null: Singleton+numero: int

    $Singleton()

    +get4nstancia(): Clase+get1umero(): int+set1umero(int numero)+4nstance(): Singleton

    $instance

  • 7/25/2019 Trabajo Final Patrones de diseo

    28/103

    55Principaljava

    public class Principal 1 public static void main2%trin#9: ar#s3 1

    0lase b$eto;0lase.#et-nstancia234 0lase b$etoA;0lase.#et-nstancia234 0lase b$etoE;0lase.#et-nstancia234 b$eto.setumero2G34 %ystem.out.println2b$eto.numero34 %ystem.out.println2b$etoA.numero34 %ystem.out.println2b$etoE.numero34

    55

    + continuacin unos e$emplos de este patrnEjemplo'

    &di(o fuente

    Instanciajava

    import $ava*.swin#.T,rame4

    public class -nstancia 1

    private static T,rame $f4 public static int cantidad;B"llm4

    private -nstancia23 1

    5

    public static T,rame #et-nstacia231

    if2$f;;null31 $f; new Lo#in234 llm@@4 5 return $f4 5

    public static void vecesLlamado231%ystem.out.println2/%e ha llamado el metodo' /@2cantidad;cantidad@llm3

    @/ veces/345

    52o(injava

    !nstancia

    +cantidad: int$f: 5 "rame+llm: int

    +get4nstancia(): 5 "rame+vecesLlamado()+4nstance(): 4nstancia

    $instance

  • 7/25/2019 Trabajo Final Patrones de diseo

    29/103

    public class Lo#in e*tends $ava*.swin#.T,rame 1

    public Lo#in23 1 init0omponents234 this.set6itle2/entana Lo#in/34

    this.setLocationFelative6o2null34 this.setHefault0loseperation2Y-H6W34 this.setFesi!able2false34 5

    ?%uppressYarnin#s2/unchecRed/3 II =editorJfold defaultstate;/collapsed/ desc;/Xenerated 0ode/>

    private void init0omponents23 1

    $PanelA ; new $ava*.swin#.TPanel234

    setHefault0loseperation2$ava*.swin#.Yindow0onstants.H-%P%)0L%)34

    $PanelA.setSacR#round2new $ava.awt.0olor2EDD" EDD" EDD334

    $ava*.swin#.XroupLayout $PanelALayout ; new$ava*.swin#.XroupLayout2$PanelA34 $PanelA.setLayout2$PanelALayout34 $PanelALayout.setWori!ontalXroup2

    $PanelALayout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3 .addXap2B" &BB" %hort.8+7+LU)3 34 $PanelALayout.seterticalXroup2

    $PanelALayout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3 .addXap2B" AEZ" %hort.8+7+LU)3 34

    $ava*.swin#.XroupLayout layout ; new$ava*.swin#.XroupLayout2#et0ontentPane2334 #et0ontentPane23.setLayout2layout34 layout.setWori!ontalXroup2layout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3 .add0omponent2$PanelA" $ava*.swin#.XroupLayout.H),+UL6%-O)"

    $ava*.swin#.XroupLayout.H),+UL6%-O)" %hort.8+7+LU)3 34 layout.seterticalXroup2

    layout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3

  • 7/25/2019 Trabajo Final Patrones de diseo

    30/103

    .add0omponent2$PanelA" $ava*.swin#.XroupLayout.H),+UL6%-O)"$ava*.swin#.XroupLayout.H),+UL6%-O)" %hort.8+7+LU)3 34

    pacR234

    5II =IeditorJfold>

    II ariables declaration J do not modifyprivate $ava*.swin#.TPanel $PanelA4

    II )nd of variables declaration5

    Frm.Principaljava

    import $ava*.swin#.T,rame4import $ava*.swin#.TptionPane4

    public class ,rmPrincipal e*tends $ava*.swin#.T,rame 1

    public ,rmPrincipal23 1 init0omponents234 this.set6itle2/entana Principal/34 this.setLocationFelative6o2null34 5

    ?%uppressYarnin#s2/unchecRed/3 II =editorJfold defaultstate;/collapsed/ desc;/Xenerated 0ode/>

    private void init0omponents23 1 $PanelA ; new $ava*.swin#.TPanel234 $8enuSarA ; new $ava*.swin#.T8enuSar234 $8enuA ; new $ava*.swin#.T8enu234 $8enu-temA ; new $ava*.swin#.T8enu-tem234 $8enu-temE ; new $ava*.swin#.T8enu-tem234

    setHefault0loseperation2$ava*.swin#.Yindow0onstants.)7-60L%)34 $PanelA.setSacR#round2new $ava.awt.0olor2EDD" EDD" EDD334

    $ava*.swin#.XroupLayout $PanelALayout ; new$ava*.swin#.XroupLayout2$PanelA34 $PanelA.setLayout2$PanelALayout34 $PanelALayout.setWori!ontalXroup2

    $PanelALayout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3

    .addXap2B" DD[" %hort.8+7+LU)3 34

  • 7/25/2019 Trabajo Final Patrones de diseo

    31/103

    $PanelALayout.seterticalXroup2

    $PanelALayout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3 .addXap2B" ED\" %hort.8+7+LU)3

    34

    $8enuA.set6e*t2/,ile/34

    $8enu-temA.set6e*t2/Lo#in/34 $8enu-temA.add+ctionListener2new $ava.awt.event.+ctionListener23 1 public void actionPerformed2$ava.awt.event.+ction)vent evt3 1 $8enu-temA+ctionPerformed2evt34 5 534 $8enuA.add2$8enu-temA34

    $8enu-temE.set6e*t2/%alir/34 $8enu-temE.add+ctionListener2new $ava.awt.event.+ctionListener23 1 public void actionPerformed2$ava.awt.event.+ction)vent evt3 1 $8enu-temE+ctionPerformed2evt34 5 534 $8enuA.add2$8enu-temE34

    $8enuSarA.add2$8enuA34

    setT8enuSar2$8enuSarA34

    $ava*.swin#.XroupLayout layout ; new$ava*.swin#.XroupLayout2#et0ontentPane2334 #et0ontentPane23.setLayout2layout34 layout.setWori!ontalXroup2layout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3 .add0omponent2$PanelA" $ava*.swin#.XroupLayout.H),+UL6%-O)"

    $ava*.swin#.XroupLayout.H),+UL6%-O)" %hort.8+7+LU)3

    34 layout.seterticalXroup2layout.createParallelXroup2$ava*.swin#.XroupLayout.+li#nment.L)+H-X3 .add0omponent2$PanelA" $ava*.swin#.XroupLayout.H),+UL6%-O)"

    $ava*.swin#.XroupLayout.H),+UL6%-O)" %hort.8+7+LU)3 34

    pacR234 5II =IeditorJfold>

    private void $8enu-temA+ctionPerformed2$ava.awt.event.+ction)vent evt3 1try 1

  • 7/25/2019 Trabajo Final Patrones de diseo

    32/103

    T,rame valor ; -nstancia.#et-nstacia234 valor.setisible2true34 -nstancia.vecesLlamado234

    5 catch 2)*ception e3 1 TptionPane.show8essa#eHialo#2null"/)rror al mostrar

    formulario/"/)rror/"TptionPane.)FFF8)%%+X)34 5 5

    private void $8enu-temE+ctionPerformed2$ava.awt.event.+ction)vent evt3 1%ystem.e*it2B34

    5

    I

  • 7/25/2019 Trabajo Final Patrones de diseo

    33/103

    II=IeditorJfold>

    I< 0reate and display the form

  • 7/25/2019 Trabajo Final Patrones de diseo

    34/103

    Marcianosjavapublic final class 8arcianos1private static final 8arcianos marcianos ; new 8arcianos234private static int cantidad4

    private 8arcianos231cantidad ; AB4

    5

    public static 8arcianos #et8arcianos231return marcianos4

    5

    public static void derriba8arcianos231if2cantidad>B31

    cantidadJJ4%ystem.out.println2/%oy el bueno" derribe un marciano/34

    55

    public static void crea8arcianos231if2cantidad>B31

    cantidad@@4%ystem.out.println2/%oy el malo" cree un marciano/34

    55

    public static void cuantosKuedan231if2cantidad>B31

    %ystem.out.println2/Kuedan en el $ue#o' /@cantidad@/marcianos/34

    5 else 1%ystem.out.println2/,elicidades" has #anadoMMM/34

    55

    Marcianos

    $cantidad: int$marcianos: 6arcianos

    $crea6arcianos()+cuantos7uedan()+derriba6arcianos()+get6arcianos(): 6arcianos

    $instance

    Computadora

    $marcianos: 6arcianos

    +crea6arcianos()

    " ugador

    $marcianos: 6arcianos

    +destruir6arcianos()

  • 7/25/2019 Trabajo Final Patrones de diseo

    35/103

    5&omputadorajava

    public class 0omputadora1 private 8arcianos marcianos4

    public 0omputadora231marcianos ; 8arcianos.#et8arcianos234 5

    public void crea8arcianos231 marcianos.crea8arcianos234 553u(adorjava

    public class Tu#ador1private 8arcianos marcianos4

    public Tu#ador231marcianos ; 8arcianos.#et8arcianos234

    5

    public void destruir8arciano231marcianos.derriba8arcianos234

    5

    53ue(ojava

    import $ava.util.%canner4

    public class Tue#o1

    public static void main2%trin#... ar#s318arcianos marcianos40omputadora computadora4Tu#ador $u#ador4%canner sc4marcianos ; 8arcianos.#et8arcianos234

    computadora ; new 0omputadora234$u#ador ; new Tu#ador234sc ; new %canner2%ystem.in34

    int disparos4

    do1%ystem.out.print2/Hi#ite los disparos' /34disparos ; sc.ne*t-nt234for2int i;B4 i=disparos4 i@@31

    $u#ador.destruir8arciano234

    5computadora.crea8arcianos234

  • 7/25/2019 Trabajo Final Patrones de diseo

    36/103

    marcianos.cuantosKuedan2345 while 2disparosM;B34

    55

    +l e$ecutar el pro#rama tenemos

    Model 4ie5 &ontroller 6M4&7 !

    )s un patrn de arquitectura de software que separa los datos y la l#ica dene#ocio de una aplicacin de la interfa! de usuario y el mdulo encar#ado de#estionar los eventos y las comunicaciones. )ste patrn plantea la separacin del

    problema en tres capas' la capa model" que representa la realidad4 lacapa controller " que conoce los m(todos y atributos del modelo" recibe y reali!alo que el usuario quiere hacer4 y la capa vista" que muestra un aspecto delmodelo y es utili!ada por la capa anterior para interaccionar con el usuario.)n clase observamos el si#uiente e$emplo'

    En lo cual a travs de este menpodramos agregar un nuevo

    producto y listarlo, en este patrn est separado por modelo, vista y controlador.

    A travs del controlador permite elegir que recursos de vista quiero mostrar.Codigo fuente del ejemplo visto en clase

    Vistas:formRegistrarProducto.jsp:

    !"#page content$ype%&te't()tml& pageEncoding%&*$+-&"!/01C$23E )tml!)tml

    !)ead !meta )ttpequiv%&Content$ype& content%&te't()tml4

    c)arset%*$+-&

    !title563 3age!(title !()ead

    !7ody !)89uevo producto!()8

    !ta7le

    !form action%&Controlador3roducto& !tr

  • 7/25/2019 Trabajo Final Patrones de diseo

    37/103

    !td0escripcin!(td !td!input type%&te't& name%&t't0escripcion&(!(td

    !(tr

    !tr !td3recio!(td

    !td!input type%&te't& name%&t't3recio&(!(td !(tr

    !tr

    !td6toc:!(td !td!input type%&te't& name%&t't6toc:&(!(td

    !(tr !tr

    !td!input type%&su7mit& name%&operacion&

    value%&;egistrar&(!(td !td!input type%&su7mit& name%&operacion&

    value%&Cancelar&(!(td

    !(tr !(form

    !(ta7le

    !(7ody!()tml

    Menu.jsp!"#page content$ype%&te't()tml& pageEncoding%&*$+-&"!/01C$23E )tml

    !)tml !)ead

    !meta )ttpequiv%&Content$ype& content%&te't()tml4

    c)arset%*$+-& !title563 3age!(title

    !()ead !7ody

    !)81peraciones de producto!()8

    !ul !li!a )ref%&.(Controlador3roducto0&De.get=essageBB4

    pu7lic static int ejecutar6tring sqlB t)roIs E'ception

    try 6tatement st % cone'ion.create6tatementB4

    int resultado % st.e'ecute*pdatesqlB4

    return resultado4

    catc) E'ception eB t)roI neI E'ception&Error al actualiMar la

    >0&De.get=essageBB4

  • 7/25/2019 Trabajo Final Patrones de diseo

    44/103

    pu7lic static void desconectarB t)roIs E'ception try

    cone'ion.closeB4

    catc)E'ception eB

    t)roI neI E'ception&Error al desconectar con la>0&De.get=essageBB4

    Acontinuacion ejemplos de este patrn

    $jemplo%

    &di(o

    fuente

    &ontroladorjavaimport $ava.awt.event.+ction)vent4import $ava.awt.event.+ctionListener4import 8odelo.modelo4import ista.vista4

    public class controlador implements +ctionListener1

    private vista vista4 private modelo modelo4

    II)n el constructor iniciali!amos nuestros ob$etos y tambien IIaadimos el +ctionListener al boton /cmdsumar/ de la -%6+ public controlador2 vista vista " modelo modelo31 this.vista ; vista4 this.modelo ; modelo4 this.vista.cmdsumar.add+ctionListener2this34 5

    II-nicia los valores del $,rame -%6+ con los datos del 8H)L public void iniciarvista231 vista.set6itle2 /Hemo 80 < $cJmouse.net/ 34 vista.setLocationFelative6o2null34

    vista

    +cmdsumar: 5 6enu4tem$Label8: 5Label$Label9: 5Label$6enu2: 56enu$6enu8: 56enu

    $cmdsumar.ctionPerformed(evt: .ctionvent)$initComponents()$6enu4tem2.ctionPerformed(evt: .ctionvent)+main(args: String [)

    controlador

    +modelo: modelo+vista: vista

    +actionPerformed(e: .ctionvent)+iniciarvista()

    modelo

    +total: int+valor2: int+valor8: int

    +gettotal(): int+getvalor2(): int+getvalor8(): int+setvalor2(val: int)+setvalor8(val: int)

  • 7/25/2019 Trabajo Final Patrones de diseo

    45/103

    vista.vt*tA.set6e*t2 %trin#.valuef2modelo.#etvalorA233 34 vista.vt*tE.set6e*t2 %trin#.valuef2modelo.#etvalorE233 34 vista.vt*tG.set6e*t2 %trin#.valuef2modelo.#ettotal233 34 5

    IILa accion del boton de la -%6+ es capturado" asi como los valores de IIlos $te*tbo*" entonces se reali!a la funcion %U8+F y se actuali!a IIel $te*tbo* correspondiente al resultado public void actionPerformed2+ction)vent e3 1 modelo.setvalorA2 -nte#er.valuef2 vista.vt*tA.#et6e*t23 3 34 modelo.setvalorE2 -nte#er.valuef2 vista.vt*tE.#et6e*t23 3 34 modelo.sumar234 vista.vt*tG.set6e*t2 %trin#.valuef2modelo.#ettotal233 34 5

    5Modelojava

    public class modelo 1 IIariables private int valorA;B4 private int valorE;B4 private int total ; sumar234

    public modelo2315

    public void setvalorA2int val31 this.valorA;val4 5

    public int #etvalorA231 return this.valorA4 5

    public void setvalorE2int val31 this.valorE;val4 5

    public int #etvalorE231 return this.valorE4 5

    public int sumar231 this.total ; this.valorA @ this.valorE4 return this.total4 5

    public int #ettotal231 return this.total4

    5

  • 7/25/2019 Trabajo Final Patrones de diseo

    46/103

    54istajava

    public final class vista e*tends $ava*.swin#.T,rame 1

    I

  • 7/25/2019 Trabajo Final Patrones de diseo

    47/103

    vt*tA.set6e*t2/B/34 vt*tA.setPreferred%i!e2new $ava.awt.Himension2QB" &B334 #ridSa#0onstraints ; new $ava.awt.XridSa#0onstraints234 #ridSa#0onstraints.#rid* ; B4 #ridSa#0onstraints.#ridy ; B4

    #ridSa#0onstraints.anchor ; $ava.awt.XridSa#0onstraints.F6WY)%64 #ridSa#0onstraints.insets ; new $ava.awt.-nsets2EB" AB" EB" B34 #et0ontentPane23.add2vt*tA" #ridSa#0onstraints34

    $LabelG.set,ont2new $ava.awt.,ont2/6ahoma/" A" GQ334 II -AZ $LabelG.set6e*t2/@/34 #ridSa#0onstraints ; new $ava.awt.XridSa#0onstraints234 #ridSa#0onstraints.#rid* ; A4 #ridSa#0onstraints.#ridy ; B4 #ridSa#0onstraints.anchor ; $ava.awt.XridSa#0onstraints.F6WY)%64 #ridSa#0onstraints.insets ; new $ava.awt.-nsets2EB" B" EB" B34

    #et0ontentPane23.add2$LabelG" #ridSa#0onstraints34

    vt*tE.set,ont2new $ava.awt.,ont2/6ahoma/" A" E&334 II -AZ vt*tE.set6e*t2/B/34 vt*tE.setPreferred%i!e2new $ava.awt.Himension2QB" &B334 #ridSa#0onstraints ; new $ava.awt.XridSa#0onstraints234 #ridSa#0onstraints.#rid* ; E4 #ridSa#0onstraints.#ridy ; B4 #ridSa#0onstraints.anchor ; $ava.awt.XridSa#0onstraints.F6WY)%64 #ridSa#0onstraints.insets ; new $ava.awt.-nsets2EB" B" EB" B34 #et0ontentPane23.add2vt*tE" #ridSa#0onstraints34

    $8enuA.set6e*t2/,ile/34

    $8enu-temA.set6e*t2/%alir/34 $8enu-temA.add+ctionListener2new $ava.awt.event.+ctionListener23 1 public void actionPerformed2$ava.awt.event.+ction)vent evt3 1 $8enu-temA+ctionPerformed2evt34 5 534 $8enuA.add2$8enu-temA34

    $8enuSarA.add2$8enuA34

    $8enuE.set6e*t2/Werramientas/34

    cmdsumar.set6e*t2/%umar/34 cmdsumar.add+ctionListener2new $ava.awt.event.+ctionListener23 1 public void actionPerformed2$ava.awt.event.+ction)vent evt3 1 cmdsumar+ctionPerformed2evt34 5 534

    $8enuE.add2cmdsumar34

  • 7/25/2019 Trabajo Final Patrones de diseo

    48/103

    $8enuSarA.add2$8enuE34

    setT8enuSar2$8enuSarA34

    pacR234

    5II =IeditorJfold>

    private void cmdsumar+ctionPerformed2$ava.awt.event.+ction)vent evt3 1II 6H add your handlin# code here'

    5

    private void $8enu-temA+ctionPerformed2$ava.awt.event.+ction)vent evt3 1%ystem.e*it2B34

    5

    public static void main2%trin# ar#s9:3 1

    $ava.awt.)ventKueue.invoReLater2new Funnable23 1 public void run23 1 new vista23.setisible2true34 5 534 5

    II ariables declaration J do not modifypublic $ava*.swin#.T8enu-tem cmdsumar4

    private $ava*.swin#.TLabel $LabelE4 private $ava*.swin#.TLabel $LabelG4 private $ava*.swin#.T8enu $8enuA4 private $ava*.swin#.T8enu $8enuE4 private $ava*.swin#.T8enuSar $8enuSarA4 private $ava*.swin#.T8enu-tem $8enu-temA4 public $ava*.swin#.T6e*t,ield vt*tA4 public $ava*.swin#.T6e*t,ield vt*tE4 public $ava*.swin#.T6e*t,ield vt*tG4 II )nd of variables declaration

    5

    Mainjavaimport controlador.controlador4import 8odelo.modelo4import ista.vista4

    public class 8ain 1

    public static void main2%trin#9: ar#s3 1 IInuevas instancias de clase modelo modelo ; new modelo234 vista vista ; new vista234

    controlador controlador ; new controlador2 vista " modelo 34 IIse inicia la vista

  • 7/25/2019 Trabajo Final Patrones de diseo

    49/103

    controlador.iniciarvista234 vista.setisible2true34 5

    5

    +l e$ecutar el pro#rama obtenemos

    Ejemplo*

    &di(o fuente

    2o(icajava

    pacRa#e modelo4import

    $ava*.swin#.TptionPane4import modelo.dao.PersonaHao4import modelo.vo.Personao4

    import controlador.0oordinador4public class Lo#ica 1

    private 0oordinador mi0oordinador4public static boolean consultaPersona;false4public static boolean modificaPersona;false4

    public void set0oordinador20oordinador mi0oordinador3 1this.mi0oordinador;mi0oordinador4

    5public void validarFe#istro2Personao miPersona3 1

    PersonaHao miPersonaHao4if 2miPersona.#et-dPersona23 > \\3 1

    miPersonaHao ; new PersonaHao234miPersonaHao.re#istrarPersona2miPersona34

    5else 1TptionPane.show8essa#eHialo#2null"/)l documento de la

    persona debe ser mas de Gdi#itos/"/+dvertencia/"TptionPane.Y+F-X8)%%+X)34

    5

    5public Personao validar0onsulta2%trin# codi#oPersona3 1

  • 7/25/2019 Trabajo Final Patrones de diseo

    50/103

    PersonaHao miPersonaHao4

    try 1int codi#o;-nte#er.parse-nt2codi#oPersona34if 2codi#o > \\3 1

    miPersonaHao ; new PersonaHao234consultaPersona;true4return miPersonaHao.buscarPersona2codi#o34

    5else1TptionPane.show8essa#eHialo#2null"/)l

    documento de la persona debe ser mas de Gdi#itos/"/+dvertencia/"TptionPane.Y+F-X8)%%+X)34

    consultaPersona;false45

    5catch 2umber,ormat)*ception e3 1

    TptionPane.show8essa#eHialo#2null"/Hebe in#resar undato numerico/"/)rror/"TptionPane.)FFF8)%%+X)34

    consultaPersona;false45 catch 2)*ception e3 1

    TptionPane.show8essa#eHialo#2null"/%e ha presentadoun )rror/"/)rror/"TptionPane.)FFF8)%%+X)34

    consultaPersona;false45return null4

    5public void validar8odificacion2Personao miPersona3 1

    PersonaHao miPersonaHao4if 2miPersona.#etombrePersona23.len#th23>D3 1

    miPersonaHao ; new PersonaHao234miPersonaHao.modificarPersona2miPersona34modificaPersona;true4

    5else1TptionPane.show8essa#eHialo#2null"/)l nombre de la

    persona debe ser mayor a Ddi#itos/"/+dvertencia/"TptionPane.Y+F-X8)%%+X)34

    modificaPersona;false455

    public void validar)liminacion2%trin# codi#o3 1PersonaHao miPersonaHao;new PersonaHao234miPersonaHao.eliminarPersona2codi#o34

    55&one$injava

    pacRa#e modelo.cone*ion4import $ava.sql.

  • 7/25/2019 Trabajo Final Patrones de diseo

    51/103

    static %trin# bd ; /code$avu/4 static %trin# lo#in ; /root/4 static %trin# password ; //4 static %trin# url ; /$dbc'mysql'IIlocalhostI/@bd4

    0onnection conn ; null4

    I

  • 7/25/2019 Trabajo Final Patrones de diseo

    52/103

    < 0lase que permite el acceso a la base de datos< ?author chenao procesos ; new +rrayList=Proceso>234 public void procesar23 1

    %ystem.out.println2/Procesando/34 procesos.add2new Proceso2334 procesos.add2new Proceso2334 procesos.add2new Proceso2334 procesos.add2new Proceso2334 procesos.add2new Proceso2334 procesos.add2new Proceso2334 for2Proceso proceso'procesos31 proceso.e$ecutar234 5

    55DiscoDurojava

    public class HiscoHuro 1 private %trin# espacio;/A.D6S/4 public void leer-nfo23 1 %ystem.out.println2/Leyendo discoduro/@#et)spacio23345

    public %trin# #et)spacio23 1 return espacio4 5

    public void set)spacio2%trin# espacio3 1

  • 7/25/2019 Trabajo Final Patrones de diseo

    83/103

    this.espacio ; espacio4 55Memoriajava

    public class 8emoria 1

    private %trin# espacio;/&XS/4 public void car#ar23 1 %ystem.out.println2/0ar#ando espacio dememoria/@#et)spacio23345

    public %trin# #et)spacio23 1 return espacio4 5

    public void set)spacio2%trin# espacio3 1 this.espacio ; espacio4 5

    5Procesojava

    import $ava.util.Fandom4public class Proceso 1 private %trin# nombre4 public Proceso231 this.nombre;/Proc/@new Fandom23.ne*tHouble234 5 public void e$ecutar231 %ystem.out.println2/Procesando /@#etombre2334 5

    public %trin# #etombre23 1 return nombre4 5

    public void setombre2%trin# nombre3 1 this.nombre ; nombre4 55,istemaOperativojava

    import $ava.util.+rrayList4public class %istemaperativo 1 0PU cpu4 8emoria memoria4 HiscoHuro discoHuro4 +rrayList=+plicacion> aplicaciones ; new +rrayList=+plicacion>234

    public %istemaperativo23 1 this.cpu ; new 0PU234 this.discoHuro ; new HiscoHuro234

    this.memoria ; new 8emoria234

    aplicaciones.add2new +plicacion2/%ervicios/334 aplicaciones.add2new +plicacion2/)scritorio/334

  • 7/25/2019 Trabajo Final Patrones de diseo

    84/103

    aplicaciones.add2new +plicacion2/)*plorador/334 aplicaciones.add2new +plicacion2/)ntorno de red/334 aplicaciones.add2new +plicacion2/Werramientas administrativas/334 aplicaciones.add2new +plicacion2/fimtica/334 5

    public void car#ar23 1 cpu.procesar234 memoria.car#ar234 discoHuro.leer-nfo234 for2+plicacion app'aplicaciones31 app.e$ecutar234 5 %ystem.out.println2/0ar#a finali!ada/34 55Principaljava

    public class Principal 1 public static void main2%trin#9: ar#s3 1 %istemaperativo % ; new %istemaperativo234 %.car#ar234 55+ continuacin tenemos los si#uientes e$emplos de este patrn

    Ejemplo'

    &di(o

    fuente

    Facadejava

    public class ,acade1

    private 0omprobarLiquidos liquidos4private 0omprobar+siento asiento4private 0omprobar)spe$os espe$os4private +rrancar arrancar4II JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ

    public ,acade231this.liquidos ; new 0omprobarLiquidos234

    Facade

    $liFuidos: ComprobarLiFuidos$asiento: Comprobar.siento$espeos: Comprobarspeos$arrancar: .rrancar

    +"acade()+arrancarCoc*e()

    Comprobar&i'uidos

    +ComprobarLiFuidos()+comprobar()

    ComprobarEspe(os

    +Comprobarspeos()+Comprobar()

    Comprobar#siento

    +Comprobar.siento()+Comprobar()

    #rrancar

    +.rrancar()+encenderContacto()

  • 7/25/2019 Trabajo Final Patrones de diseo

    85/103

    this.asiento ; new 0omprobar+siento234this.espe$os ; new 0omprobar)spe$os234this.arrancar ; new +rrancar2345II JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ

    public void arrancar0oche231liquidos.comprobar234asiento.comprobar234espe$os.comprobar234arrancar.encender0ontacto23455Arrancarjava

    Public class +rrancar 1 public +rrancar23 1

    5II JJJJJJJJJJJJJJJJJJ public void encender0ontacto23 1%ystem.out.println2/-ntroducimos la llave y le damos al encendido.../3455&omprobarAsientojava

    public class 0omprobar+siento1 public 0omprobar+siento23 1 5 public void comprobar23 1 %ystem.out.println2/0omprobamos y re#ulamos el asiento.../34 55&omprobarEspejosjava

    Public class 0omprobar)spe$os 1 public 0omprobar)spe$os23 15 public void comprobar23 1%ystem.out.println2/0omprobamos y re#ulamos los espe$os retrovisores.../34

    55&omprobar2i8uidosjava

    Public class 0omprobarLiquidos 1 public 0omprobarLiquidos23 15 public void comprobar23 1%ystem.out.println2/0omprobamos los lquidos de freno" a#ua" etc.../345

    5Principal'java

  • 7/25/2019 Trabajo Final Patrones de diseo

    86/103

    public class PrincipalA 1

    public static void main2%trin#9: ar#s3 1 ,acade fachada ; new ,acade234

    fachada.arrancar0oche234%ystem.out.println2/NnProceso finali!ado./34

    55+l e$ecutar el cdi#o obtenemos

    Patrones de comportamientoLos patrones de estructuracin aportan soluciones a los problemas de estructuracin dedatos y de ob$etos.)l ob$etivo de los patrones de comportamiento consiste en proporcionar soluciones paradistribuir el procesamiento y los al#oritmos entre los ob$etos.Estos patrones organiMan los o7jetos as como sus interacciones especificando los flujos decontrol y de procesamiento en el seno de un sistema de o7jetos.

    Observer !

    Hefine una dependencia del tipo uno a muchos entre ob$etos" de manera quecuando uno de los ob$etos cambia su estado" notifica este cambio a todos losdependientes.)ste patrn tambi(n se conoce como el patrn de publicacininscripcin o modelo patrn. )stos nombres su#ieren las ideas bsicas del

    patrn" que son' el ob$eto de datos" que se le puede llamar %u$eto a partir deahora" contiene atributos mediante los cuales cualquier ob$eto bservador o vistase puede suscribir a (l pasndole una referencia a s mismo. )l %u$eto mantieneas una lista de las referencias a sus observadores. Los observadores a su ve!estn obli#ados a implementar unos m(todos determinados mediante los cuales

    el %u$eto es capa! de notificar a sus observadores suscritos los cambios que sufrepara que todos ellos ten#an la oportunidad de refrescar el contenidorepresentado.)n clase observamos el si#uiente e$emplo mostrado en el si#uiente dia#rama declase'

  • 7/25/2019 Trabajo Final Patrones de diseo

    87/103

    + trav(s desu$eto a#re#a"elimina y notificacualquier cambioreali!ado.+ continuacinse muestra el cdi#o

    fuente del e$emplohecho en clase'

    Observadorjava

    public interface bservador 1 public void update2%trin# availability34

    5,ujetojava

    public class Persona implements bservador1%trin# nombre4

    public Persona2%trin# n3 1this.nombre ; n4

    5

    public %trin# #etombre23 1return nombre4

    5

    public void setombre2%trin# n3 1this.nombre ; n4

    5

    public void update2%trin# e*istencia3 1%ystem.out.println2/Wola /@nombre@/" /@e*istencia@/ este

    producto en stocR/345

    5Productojava

    import $ava.util.+rrayList4public class Producto implements %u$eto1

    private +rrayList=bservador> observadores ; new+rrayList=bservador>234

    private %trin# nombre4 private %trin# tipo4

    Observador

    +update(availabilit#: String)+Gpdate()

    persona

    $nombre: String

    +persona(n: String)+get1ombre(): String+set1ombre(n: String)+update(eHistencia: String)

    Producto

    $observadores: .rra#List$nombre: String$tipo: String+eHistencia: String

    +Producto(n: String- t: String- e: String)+getObservers(): .rra#List+setObservers(observers: .rra#List)+get1ombre(): String+set1ombre(n: String)+getipo(): String+setipo(t: String)

    Su(eto

    +registerObserver(observer: Observador)+removeObserver(observer: Observador)+notif#Observers()

    +subect

  • 7/25/2019 Trabajo Final Patrones de diseo

    88/103

    %trin# e*istencia4public Producto2%trin# n" %trin# t"%trin# e3 1

    super234this.nombre ; n4this.tipo ; t4

    this.e*istencia;e45public +rrayList=bservador> #etbservers23 1

    return observadores45

    public void setbservers2+rrayList=bservador> observers3 1this.observadores ; observers4

    5public %trin# #etombre23 1

    return nombre45

    public void setombre2%trin# n3 1this.nombre ; n4

    5public %trin# #et6ipo23 1

    return tipo45

    public void set6ipo2%trin# t3 1this.tipo ; t4

    5public %trin# #et)*istencia23 1

    return e*istencia45

    public void set)*istencia2%trin# e3 1this.e*istencia ; e4notifybservers234

    5public void notifybservers23 1

    %ystem.out.println2/otificando a todos losobservadores/34

    for 2bservador ob ' observadores3 1

    ob.update2this.e*istencia 34 55

    public void re#isterbserver2bservador observer3 1observadores.add2observer34

    5public void removebserver2bservador observer3 1

    observadores.remove2observer345

    5

    Principaljavapublic class Principal 1

  • 7/25/2019 Trabajo Final Patrones de diseo

    89/103

    public static void main2%trin#9: ar#s3 1 Persona $uan;new Persona2/Tuan/34 Persona marta;new Persona2/8arta/34 Producto #alleta;new Producto2/reo/" /Xalleta/" /o hay/34

    #alleta.re#isterbserver2$uan34

    #alleta.re#isterbserver2marta34#alleta.set)*istencia2/% hay/345

    5+ continuacin los si#uientes e$emplos de este patrn '

    Ejemplo'

    )iempo

    $segundos: int$minutos: int$*ora: int$*ilo!eecucion: *read$observes: .rra#List

    +addObserver(observer: 4Observer)+get3ora(): int+get6inutos(): int+getSegundos(): int$noti@car()+removeObserver(observer: 4Observer)+run()+set3ora(*ora: int)+set6inutos(minutos: int)+setSegundos(segunddos: int)+start()

    +toString(): String

    ObservadorDeConsola

    +observable: 4Observable

    +update()

    !Observable

    +addObserver(observer: 4Observer)+removeObserver(observer: 4Observer)

    !Observer

    +update()

    ObservadorGra*co

    +lbl3ora: 5 Label+observable: 4Observable+panelContenedor: 5 Panel

    +update()$initComponents()

    &di(o fuente

    ObservadorDe&onsolajava

    public class bservadorHe0onsola implements -bserver 1

    private -bservable observable4

    I

  • 7/25/2019 Trabajo Final Patrones de diseo

    90/103

    this.observable.addbserver2this34 5

    I

  • 7/25/2019 Trabajo Final Patrones de diseo

    91/103

    @ #param o7server o7jeto F17server del Arra?ist &o7servers& que se desea @ eliminar.

    @(

    #1verride pu7lic void remove17serverF17server o7serverB

    o7servers.removeo7serverB4

    (@@ @ 6etter de la )ora.

    @ @ #param )ora int )ora a almacenar.

    @(

    pu7lic void setHoraint )oraB t)is.)ora % )ora4

    (@@

    @ 6etter de los minutos. @

    @ #param minutos int minutos a almacenar. @(

    pu7lic void set=inutosint minutosB

    t)is.minutos % minutos4

    (@@

    @ 6etter de los segundos.

    @ @ #param segundos int segundos a almacenar.

    @( pu7lic void set6egundosint segundosB

    t)is.segundos % segundos4

    (@@ @ Jetter de la )ora.

    @ @ #return int )ora. @(

    pu7lic int getHoraB return )ora4

    (@@

    @ Jetter de los minutos. @

    @ #return int minutos.

    @( pu7lic int get=inutosB

  • 7/25/2019 Trabajo Final Patrones de diseo

    92/103

    return minutos4

    (@@ @ Jetter de los segundos.

    @ @ #return int segundos.

    @(

    pu7lic int get6egundosB return segundos4

    (@@

    @ Jetter del Array?ist con los o7servadores del estado del o7jeto. @

    @ #return Array?ist!F17server o7servers.

    @( pu7lic Array?ist!F17server get17serversB

    return o7servers4

    (@@

    @ 6o7reescritura del metodo to6tringB de la clase 17ject que define la

    @ representacion de este o7jeto como una cadena. @

    @ #return 6tring o7jeto tiempo en modo de cadena de te'to. @(

    #1verride

    pu7lic 6tring to6tringB return getHoraB ! 8O < &O& D getHoraB getHoraBB D && D

    get=inutosB ! 8O < &O& D get=inutosB get=inutosBB D && Dget6egundosB ! 8O < &O& D get6egundosB get6egundosBB4

    private void notificarB

    for Fterator!F17server it % o7servers.iteratorB4 it.)as9e'tB4B F17server i17server % it.ne'tB4

    i17server.updateB4

    (@@

    @ =etodo que inicia la ejecucion del )ilo con el comportamiento definido.

    @( pu7lic void startB

    )ilo0eEjecucion % neI $)readt)isB4 )ilo0eEjecucion.startB4

    (@@

  • 7/25/2019 Trabajo Final Patrones de diseo

    93/103

    @ =etodo que, manteniendo el o7jeto sincroniMado, desarrolla un 7ucle @ infinito que analiMa los valores del estado del o7jeto y los modifica

    @ cada segundo compro7ando si se de7en incrementar los minutos y )oras.

    @( #1verride

    pu7lic void runB sync)roniMed t)isB

    I)ile trueB

    try ((Esperamos un segundo.

    t)is.Iait8OOOB4 ((6i el valor de segundos llega a WO.

    if get6egundosB D 8 %% WOB

    ((3onemos los segundos a O. set6egundosOB4

    ((6i el valor de minutos llega a WO.

    if get=inutosB D 8 %% WOB ((3onemos los minutos a O.

    set=inutosOB4 ((6i el valor de las )oras llega a RT.

    if getHoraB D 8 %% RTB ((3onemos el valor de las )oras a O.

    setHoraOB4

    else ((6i no incrementamos la )ora en una unidad.

    setHoragetHoraB D 8B4

    else

    ((6i no incrementamos los minutos en una unidad. set=inutosget=inutosB D 8B4

    else

    ((6i no incrementamos los segundos en una unidad.

    set6egundosget6egundosB D 8B4

    ((9otificamos a los o7servadores que se )a producido un cam7io ((en los valores del estado del o7jeto.

    notificarB4 catc) FnterruptedE'ception e'B ((En caso de que se produMca alguna interrupcion del )ilo

    ((capturamos la e'cepcion y mostramos un mensaje. ?ogger.get?ogger$iempo.class.get9ameBB.log?evel.6EKE;E,

    &6e produjo una e'cepcin en la ejecucin.&, e'B4

    )-bserver.javapu7lic interface F17server

  • 7/25/2019 Trabajo Final Patrones de diseo

    94/103

    void updateB4

    )-bservable.javapu7lic interface F17serva7le void add17serverF17server o7serverB4

    remove17serverF17server o7serverB4

    -bservador(rafico.javapu7lic class 17servadorJrafico e'tends java'.sIing.5+rame implementsF17server

    private F17serva7le o7serva7le4

    (@@ @ Constructor unico de la clase 17servadorJrafico.

    @

    @ #param o7serva7le F17serva7le o7jeto del cual estaremos pendiendes telos

    @ cam7ios de estado. @(

    pu7lic 17servadorJraficoF17serva7le o7serva7leB initComponentsB4

    set?ocation;elative$onullB4

    t)is.o7serva7le % o7serva7le4 t)is.o7serva7le.add17servert)isB4

    (@@

    @ $)is met)od is called from Iit)in t)e constructor to initialiMe t)e form. @ GA;9F9J 0o 91$ modify t)is code. $)e content of t)is met)od is

    alIays @ regenerated 7y t)e +orm Editor.

    @(

    #6uppressGarnings&unc)ec:ed&B (( !editorfold defaultstate%&collapsed& desc%&Jenerated Code&

    private void initComponentsB

    panelContenedor % neI java'.sIing.53anelB4 l7lHora % neI java'.sIing.5?a7elB4

    set0efaultClose1perationjava'.sIing.GindoIConstants.EXF$Y19YC?16EB4

    set=a'imum6iMeneI java.aIt.0imensionSOO, 8OOBB4

    set=inimum6iMeneI java.aIt.0imensionWO, SOBB4

    panelContenedor.set=a'imum6iMeneI java.aIt.0imensionSOO, 8OOBB4 panelContenedor.set=inimum6iMeneI java.aIt.0imensionWO, SOBB4

    panelContenedor.set3referred6iMeneI java.aIt.0imensionSOO, 8OOBB4

    l7lHora.setHoriMontal$e't3ositionjava'.sIing.6IingConstants.CE9$E;B4

  • 7/25/2019 Trabajo Final Patrones de diseo

    95/103

    l7lHora.set=a'imum6iMeneI java.aIt.0imensionSOO, 8OOBB4 l7lHora.set3referred6iMeneI java.aIt.0imensionSOO, 8OOBB4

    l7lHora.setKerifyFnputG)en+ocus$argetfalseB4

    panelContenedor.addl7lHoraB4

    getContent3aneB.addpanelContenedor, java.aIt.>order?ayout.CE9$E;B4

    pac:B4

    (( !(editorfold(( Karia7les declaration do not modify

    private java'.sIing.5?a7el l7lHora4 private java'.sIing.53anel panelContenedor4

    (( End of varia7les declaration

    (@@

    @ =etodo de la interfaM F17server implementado que actualiMara el te'to del

    5?a7el. @(

    #1verride pu7lic void updateB

    l7lHora.set$e'to7serva7le.to6tringBB4 pac:B4

    -bserverPrincipal.javapu7lic class 17server3rincipal

    pu7lic static void main6tringPQ argsB

    $iempo tiempo % neI $iempoRS, UZ, UOB4 17servador0eConsola oConsola % neI 17servador0eConsolatiempoB4

    17servadorJrafico oJrafico % neI 17servadorJraficotiempoB4 oJrafico.setKisi7letrueB4

    tiempo.startB4

    Al ejecutar el cdigo o7tenemos

    ,trate(y !

    Permite disponer de varios m(todos para resolver un problema y ele#ir culutili!ar en tiempo de e$ecucin.Hetermina cmo se debe reali!ar el intercambio de mensa$es entre diferentesob$etos para resolver una tarea. )l patrn estrate#ia permite mantener uncon$unto de al#oritmos de entre los cuales el ob$eto cliente puede ele#ir aquel

  • 7/25/2019 Trabajo Final Patrones de diseo

    96/103

    que le conviene e intercambiarlo dinmicamente se#n sus necesidades.)n clase observamos un e$emplo de este patrn de comportamiento el cual semuestra en el si#uiente dia#rama de clase.

    + la persona se le asi#na un rol" es decir se crea un ob$eto a la clase Persona"

    donde irn los setFol" #etFol" ya que estos m(todos le dirn cmo se comporta.+hora veremos el cdi#o utili!ado en el e$emplo reali!ado en clase'Personajava

    public class Persona 1 private %trin# dni4 private %trin# apellidos4 private %trin# nombres4 private Fol rol4 public Persona231 5

    public Persona2%trin# dni" %trin# apellidos" %trin# nombres31

    this.dni;dni4 this.apellidos;apellidos4 this.nombres;nombres4 5 public %trin# #etHni23 1 return dni4 5 public %trin# #et+pellidos23 1 return apellidos4 5 public %trin# #etombres23 1

    return nombres4 5

    Persona

    +dni: String+apellidos: String+nombres: String$rol: ?ol

    +Persona(dni: String- apellidos: String- nombres: String)+get!ni(): String+get.pellidos(): String+get1ombres(): String+get?ol(): ?ol+set!ni(String dni)+set.pellidos(String apellidos)+set1ombres(String nombres)+set?ol(rol: ?ol)+negociar()

    Rol

    +negociar()

    $endedor

    +Bendedor()+negociar()

    Comprador

    +Comprador()+negociar()

  • 7/25/2019 Trabajo Final Patrones de diseo

    97/103

    public Fol #etFol231

    return rol4 5 public void setHni2%trin# dni3 1

    this.dni ; dni4 5 public void set+pellidos2%trin# apellidos3 1 this.apellidos ; apellidos4 5 public void setombres2%trin# nombres3 1 this.nombres ; nombres4 5

    public void setFol2Fol rol31 this.rol;rol4 5

    public void ne#ociar231 rol.ne#ociar234 55

    +oljava

    public interface Fol 1 public void ne#ociar23454endedorjava

    public class endedor implements Fol1 public endedor231

    5 public void ne#ociar231 %ystem.out.println2/e#ocia como vendedor/34 55&ompradorjava

    public class 0omprador implements Fol 1 public 0omprador231

    5 public void ne#ociar231 %ystem.out.println2/e#ocia como comprador/34 55

    Principaljava

    public class Principal 1 public static void main2%trin#9: ar#s3 1 Persona $uan ; new Persona2/[E[E[E[E/"/P(re!/"/Tuan/34 $uan.setFol2new 0omprador2334

    $uan.ne#ociar234 $uan.setFol2new endedor2334

  • 7/25/2019 Trabajo Final Patrones de diseo

    98/103

    $uan.ne#ociar234 55+ continuacin mostraremos dos e$emplos de este patrn.

    Ejemplo'

    &di(o

    fuente

    Avionjava

    public abstract class +vion1

    private +l#oritmo mi+l#oritmo4

    public void set+l#oritmo2+l#oritmo a31this.mi+l#oritmo ; a4

    5

    public void mover231this.mi+l#oritmo.moverse234

    55Avion&omercialjava

    public class +vion0omercial e*tends +vion1 public +vion0omercial231 %ystem.out.println2/

  • 7/25/2019 Trabajo Final Patrones de diseo

    99/103

    ?verridepublic void moverse231

    %ystem.out.println2/8oviendose sobre ruedas/345

    5

    EnAire4elo9javapublic class )n+ireelo! implements +l#oritmo1

    ?verridepublic void moverse231

    %ystem.out.println2/olando muy rapidoMMM/345

    5PruebaEstrate(iajava

    public class Prueba)strate#ia1public static void main2%trin#9: ar#s31

    +vion0omercial avion0omercial ; new +vion0omercial234

    avion0omercial.set+l#oritmo2new )n6ierra2334 avion0omercial.mover234 avion0omercial.set+l#oritmo2new )n+ire2334 avion0omercial.mover234 %ystem.out.println234

    +vionFapido avionFapido ; new +vionFapido234 avionFapido.set+l#oritmo2new )n6ierra2334 avionFapido.mover234 avionFapido.set+l#oritmo2new )n+ireelo!2334 avionFapido.mover234 %ystem.out.println234

    55+esultado de cdi(o

    Ejemplo*

  • 7/25/2019 Trabajo Final Patrones de diseo

    100/103

    &di(o Fuente

    ,in(letonjava

    public class %in#leton implements ,i#ura1,i#ura fi#ura4 private static %in#leton instancia;null4 public static %in#leton #et-nstancia231 if2instancia;;null31 instancia;new %in#leton234 5 return instancia4 5 private %in#leton231

    5

    public ,i#ura #et,i#ura23 1 return fi#ura4 5

    public void set,i#ura2,i#ura fi#ura3 1 this.fi#ura ; fi#ura4 5

    ?verride

    public double 0alcular+rea231 return fi#ura.0alcular+rea234

    55Fi(urajava

    public interface ,i#ura 1 public double 0alcular+rea2345&irculojava

    public class 0irculo implements ,i#ura 1 private double radio4

    Circulo

    $radio: double

    +Circulo()+Circulo(radio: double)+get?adio(): double+set?adio(radio: double)+Calcular.rea(): double

    Cuadrado

    $lado: double

    +Cuadrado()+Cuadrado(lado: double)+getLado(): double+setLado(lado: double)+Calcular.rea(): double

    Rectangulo

    $base: double$altura: double

    +?ectangulo()+?ectangulo(base: double- altura: double)+getDase(): double+setDase(base: double)+get.ltura(): altura+set.ltura(altura: double)+Calcular.rea(): double

    )riangulo

    $base: double$altura: double

    +riangulo()+riangulo(base: double- altura: double)+getDase(): double+setDase(base: double)+get.ltura(): altura+set.ltura(altura: double)+Calcular.rea(): double

    Figura

    +Calcular.rea(): !ouble

    Singleton

    +@gura: "igura$instancia: Singleton % null

    $Singleton()+get"igura(): "igura+Set"igura("igura @gura)+Calcular.rea(): double

    estrateg#

    if(instancia%%null)I instancia%ne& Singleton() J K return instanciaJ

  • 7/25/2019 Trabajo Final Patrones de diseo

    101/103

    public 0irculo23 1 5

    public 0irculo2double radio3 1 this.radio ; radio4

    5

    public double #etFadio23 1 return radio4 5

    public void setFadio2double radio3 1 this.radio ; radio4 5

    ?verride public double 0alcular+rea231 return 8ath.P-

  • 7/25/2019 Trabajo Final Patrones de diseo

    102/103

    this.altura ; altura4 5

    public Fectan#ulo23 1 5

    public double #etSase23 1 return base4 5

    public void setSase2double base3 1 this.base ; base4 5

    public double #et+ltura23 1 return altura4

    5

    public void set+ltura2double altura3 1 this.altura ; altura4 5

    ?verride public double 0alcular+rea231 return base

  • 7/25/2019 Trabajo Final Patrones de diseo

    103/103

    5

    public void set+ltura2double altura3 1 this.altura ; altura4 5

    ?verride public double 0alcular+rea231 return 22base