Trabajo Final Patrones de diseño
-
Upload
jairo-calle -
Category
Documents
-
view
235 -
download
0
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