SlideShare una empresa de Scribd logo
1 de 19
PATRONES DE DISEÑO

Ing. Yeimmy Alejandra Contreras
            Suarez
• El diseño es un modelo del sistema, realizado
  con una serie de principios y técnicas, que
  permite describir el sistema con el suficiente
  detalle como para ser implementado.
• Estos esquemas y estructuras son conceptos
  reusables y nos permiten no reinventar la
  rueda. Un buen ingeniero reutiliza un
  esquema de solución ante problemas
  similares.
CONCEPTO
• "Una arquitectura orientada a objetos bien
  estructurada está llena de patrones. La calidad
  de un sistema orientado a objetos se mide por
  la atención que los diseñadores han prestado
  a las colaboraciones entre sus objetos. Los
  patrones conducen a arquitecturas más
  pequeñas, más simples y más comprensibles".
  (Grady Booch)
Historia
•   El concepto de "patrón de diseño" que tenemos en
    Ingeniería del Software se ha tomado prestado de la
    arquitectura. En 1977 se publica el libro "A Pattern
    Language: Towns/Building/Construction", de Christopher
    Alexander, Sara Ishikawa, Murray Silverstein, Max
    Jacobson, Ingrid Fiksdahl-King y Shlomo Angel, Oxford
    University Press. Contiene numerosos patrones con una
    notación específica de Alexander.
•   Alexander comenta que “Cada patrón describe un
    problema que ocurre una y otra vez en nuestro
    entorno, para describir después el núcleo de la solución
    a ese problema, de tal manera que esa solución pueda
    ser usada más de un millón de veces sin hacerlo siquiera
    dos veces de la misma forma”. El patrón es un esquema
    de solución que se aplica a un tipo de problema, esta
    aplicación del patrón no es mecánica, sino que requiere
    de adaptación y matices. Por ello, dice Alexander que
    los numerosos usos de un patrón no se repiten dos veces
    de la misma forma.
•   La idea de patrones de diseño estaba "en el aire", la
    prueba es que numerosos diseñadores se dirigieron a
    aplicar las ideas de Alexander a su contexto. El catálogo
    más famoso de patrones se encuentra en “Design
    Patterns: Elements of Reusable Object-Oriented
    Software”, de Erich Gamma, Richard Helm, Ralph
    Johnson y John Vlissides, 1995, Addison-Wesley,
    también conocido como el libro GOF (Gang-Of-Four).
•   Siguiendo el libro de GOF los patrones se clasifican
    según el proposito para el que han sido definidos:
•   Creacionales: solucionan problemas de creación de
    instancias. Nos ayudan a encapsular y abstraer dicha
    creación.
•   Estructurales: solucionan problemas de composición
    (agregación) de clases y objetos.
•   De Comportamiento: soluciones respecto a la interacción
    y responsabilidades entre clases y objetos, así como los
    algoritmos que encapsulan.
Pasos para describir un caso
                                          •   Nombre
                                          •   Propósito o finalidad
                                          •   Sinónimos (otros nombres por
                                              los que puede ser conocido)
•   Los patrones de diseño son
    descripciones de clases cuyas         •   Problema al que es aplicable
    instancias colaboran entre sí. Cada   •   Estructura (diagrama de clases)
    patrón es adecuado para ser           •   Participantes (responsabilidad
    adaptado a un cierto tipo de              de cada clase)
    problema.                             •   Colaboraciones (diagrama de
                                              interacciones)
                                          •   Implementación
                                              (consejos, notas y ejemplos)
                                          •   Otros patrones con los que está
                                              relacionado
Tipos de Patrones que se manejan en
                 Java
• A continuación veremos      • Creación, patrones para
  la aplicación de patrones     crear objetos
  de diseño en Java,          • Comportamiento,
  normalmente se puede          patrones para coordinar
  leer mucho al respecto,       la interacción funcional
  pero lo que realmente         entre objetos
  interesa es saber cuándo    • Estructural, patrones para
  utilizarlos y cómo se         manejar          relaciones
  terminan implementando        estáticas y estructurales
  estos conceptos.              entre objetos
                              • Sistema, patrones para
                                manejar la interacción a
                                nivel de sistema
Patrones de Creación
• Este tipo de patrones soporta una de las tareas
  más comunes en la programación orientada a
  objetos, la creación de objetos en un sistema.
  Algunos patrones de este tipo son:
• Abstract factory
• Builder
• Factory Method
• Prototype
• Singleton
PATRON FACTORY
• Define una interface
  para crear objetos,
  dejando      a     las
  subclases decidir la
  clase      específica.
  Permite delegar la
  responsabilidad de la
  instanciación a las
  subclases.
   Ventajas: Factory Methods elimina la necesidad de asociar aplicación-
   clases específicas en el código. Sólo trabajamos con interfaces.
Ejemplo
• Se nos encarga crear un traductor que
  devuelva los números del cero al diez en tres
  idiomas: inglés, español, y alemán. Existen
  muchísimas maneras de hacer esto. Al final, se
  desea un método que reciba un entero entre 0
  y 10 y que devuelva una cadena con el
  nombre de dicho número en el idioma que se
  esté trabajando.
Una manera de entrarle al problema podría ser
algo así:
• Esta solución parece funcionar,
  y de hecho lo hace. Pero
  imaginemos que ahora nos
  dicen     que     desean     la
  traducción de todos los
  números? Sin duda el código
  comenzará a crecer. Y claro,
  ahora tendremos que agregar
  código de lógica para cada
  idioma para escribir números
  como 752, 1233, etc.
• Como nos gusta hacer gala de
  nuestro enfoque a objetos, los
  primero que se nos ocurre es
  una herencia. Definiremos una
  clase abstracta Traductor, y
  para cada idioma haremos una
  subclase de Traductor.
• Vamos a crear una
  clase     especializada
  para diccionario, que
  se encargará         de
  traducir los números.
  Tendremos una clase
  especializada      para
  traducir los números
  al español, que iría
  algo así:
La clase para el inglés iría
• Ahora, en el momento de querer utilizar un
  diccionario, se llamaría algo así
Entonces,    la   clase    MainClient
cambiaría un poco y quedaría así:
Qué hemos ganado?
• Primero, nuestro código es mucho más legible. Segundo es bastante
  más escalable. Podemos agregar el traductor para el francés muy
  fácilmente. Tercero hemos escondido la manera en la que
  traducimos a Tradúceme. Por ejemplo, puede ser que las
  traducciones a chino las vayamos a traer a un web Service. En ese
  caso TraductorChino se encargaría de hacer todo el ajetreo de
  conectarse a internet y buscar el web services, pero los demás ni se
  enteran.
• Pero el Factory Pattern no ha aperecido, Es tiempo de irlo a llamar.
  Bueno, Traduceme está haciendo algo que no le compete: está
  eligiendo la instancia de Traductor que quiere usar. Imaginen que se
  usa el traductor en 100 lugares, entonces en cien lugares se tiene
  que buscar qué clase de Traductor vamos a instanciar. El patrón de
  fábrica -factory pattern- nos esconde esa lógica. Vamos a agregar
  ahora nuestra fábrica de traductores.
• ¿Qué hace TraductorFactory? Simplemente
  elige, en base a los argumentos dados – en este
  caso el idioma- qué clase de traductor se
  instanciará. Traduceme de nuevo cambia y
  quedaría así:
• MainClient se ha visto dramáticamente reducido, y su código es muy fácil
  de leer. Quien quiera usar un traductor simplemente hará llamar a
  Traduceme. Traduceme sabe el idioma que eligieron, pero no sabe que
  subclase de Traductor instanciar, pero sabiendo el idioma
  TraductorFactory sabe exáctamente qué instancia de Traductor crear. Si la
  aplicación desea cambiar de idioma simplemente le envía otro parámetro
  a Traduceme y listo. También agregar idiomas es más manejable que
  antes.
• El Factory Pattern esconde al usuario final dle código la desición de qué
  sublclase instanciar, y promueve el encapsulamiento de las partes más
  variables del sistema. En términos generales, una fábrica abstracta
  consiste de las siguientes partes:
• Un cliente, que es el que llama a la fábrica (en nuestro caso MainClient).
• Una fábrica, que decidé la clase a instanciar (TraductorFactory).
• Un prodicto, lo que la fábrica devuelve (para nosotros las instancias de
  Traductor).

Más contenido relacionado

La actualidad más candente

Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 
Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructuralesAutentia
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoFYaskelly Yedra
 
Patrones de diseño - Daniel E. Jaramillo
Patrones de diseño - Daniel E. JaramilloPatrones de diseño - Daniel E. Jaramillo
Patrones de diseño - Daniel E. Jaramillo2008PA2Info3
 
Patrones bridge puente
Patrones bridge puentePatrones bridge puente
Patrones bridge puenteMario Cabrera
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño Ijjegonzalezf
 
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFjuansoto86
 
Desarrollo basado en patrones
Desarrollo basado en patronesDesarrollo basado en patrones
Desarrollo basado en patronesMarvin Zumbado
 
Patrones de creación
Patrones de creaciónPatrones de creación
Patrones de creaciónAutentia
 
Patrones comportamiento
Patrones comportamientoPatrones comportamiento
Patrones comportamientoJuan Camilo
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoIsrael Rey
 
Introducción a los patrones de diseño
Introducción a los patrones de diseñoIntroducción a los patrones de diseño
Introducción a los patrones de diseñoMario Solarte
 

La actualidad más candente (20)

Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructurales
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Patrones de diseño - Daniel E. Jaramillo
Patrones de diseño - Daniel E. JaramilloPatrones de diseño - Daniel E. Jaramillo
Patrones de diseño - Daniel E. Jaramillo
 
Patrones Creacionales
Patrones CreacionalesPatrones Creacionales
Patrones Creacionales
 
Patrones bridge puente
Patrones bridge puentePatrones bridge puente
Patrones bridge puente
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoF
 
Desarrollo basado en patrones
Desarrollo basado en patronesDesarrollo basado en patrones
Desarrollo basado en patrones
 
Patrones GOF
Patrones GOFPatrones GOF
Patrones GOF
 
Patrones de creación
Patrones de creaciónPatrones de creación
Patrones de creación
 
Patrones comportamiento
Patrones comportamientoPatrones comportamiento
Patrones comportamiento
 
Patrones diseño de software
Patrones diseño de softwarePatrones diseño de software
Patrones diseño de software
 
Presentacion Patrones Creacionales
Presentacion Patrones CreacionalesPresentacion Patrones Creacionales
Presentacion Patrones Creacionales
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Patrones de Diseño: Prototype
Patrones de Diseño: PrototypePatrones de Diseño: Prototype
Patrones de Diseño: Prototype
 
Introducción a los patrones de diseño
Introducción a los patrones de diseñoIntroducción a los patrones de diseño
Introducción a los patrones de diseño
 
06 patrones
06 patrones06 patrones
06 patrones
 

Destacado

SG 09 Patrones de Integración Empresarial Apache Camel (Draft)
SG 09 Patrones de Integración Empresarial Apache Camel (Draft)SG 09 Patrones de Integración Empresarial Apache Camel (Draft)
SG 09 Patrones de Integración Empresarial Apache Camel (Draft)Domingo Suarez Torres
 
Patrones de Integración Empresariales
Patrones de Integración EmpresarialesPatrones de Integración Empresariales
Patrones de Integración EmpresarialesAbimael Desales López
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño Ikaolong
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoGermania Rodriguez
 
Orquestacion y Coreografia de Servicios Web
Orquestacion y Coreografia de Servicios WebOrquestacion y Coreografia de Servicios Web
Orquestacion y Coreografia de Servicios Webdaniel_lt
 
Die Anfänge der Ägyptischen Sammlung
Die Anfänge der Ägyptischen Sammlung Die Anfänge der Ägyptischen Sammlung
Die Anfänge der Ägyptischen Sammlung helmutsatzinger
 
012 Estudio de Caso Etica GCBS. Caso gerente comcel
012 Estudio de Caso Etica GCBS. Caso gerente comcel012 Estudio de Caso Etica GCBS. Caso gerente comcel
012 Estudio de Caso Etica GCBS. Caso gerente comcelEdgar Devia Góngora
 
Race cycler groups explanation
Race cycler groups explanationRace cycler groups explanation
Race cycler groups explanationinTouchMobile
 
Quelles sont les motivations des Français qui font le choix de l’investisseme...
Quelles sont les motivations des Français qui font le choix de l’investisseme...Quelles sont les motivations des Français qui font le choix de l’investisseme...
Quelles sont les motivations des Français qui font le choix de l’investisseme...Monimmeuble.com
 
Blake et mortimer 2014 fr
Blake et mortimer 2014 frBlake et mortimer 2014 fr
Blake et mortimer 2014 framelieretorre
 
Innovations™ Magazine April - June 2014 French
Innovations™ Magazine April - June 2014 FrenchInnovations™ Magazine April - June 2014 French
Innovations™ Magazine April - June 2014 FrenchT.D. Williamson
 
Investigación Cualitativa
Investigación CualitativaInvestigación Cualitativa
Investigación CualitativaPavel Vargas
 
Offre formation digitale Ferret consulting group
Offre formation digitale Ferret consulting groupOffre formation digitale Ferret consulting group
Offre formation digitale Ferret consulting groupVincent Herbelet
 
Identités visuelles 2001 2014 Ferret consulting group
Identités visuelles 2001 2014 Ferret consulting groupIdentités visuelles 2001 2014 Ferret consulting group
Identités visuelles 2001 2014 Ferret consulting groupVincent Herbelet
 
Microbiología José Muñoz
Microbiología  José MuñozMicrobiología  José Muñoz
Microbiología José MuñozLcdo. Biologia
 
Consultorioparacajón
ConsultorioparacajónConsultorioparacajón
ConsultorioparacajónCarmen Cea
 

Destacado (20)

SG 09 Patrones de Integración Empresarial Apache Camel (Draft)
SG 09 Patrones de Integración Empresarial Apache Camel (Draft)SG 09 Patrones de Integración Empresarial Apache Camel (Draft)
SG 09 Patrones de Integración Empresarial Apache Camel (Draft)
 
Patrones de Integración Empresariales
Patrones de Integración EmpresarialesPatrones de Integración Empresariales
Patrones de Integración Empresariales
 
Orquestación o coreografía
Orquestación o coreografíaOrquestación o coreografía
Orquestación o coreografía
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseño
 
Orquestacion y Coreografia de Servicios Web
Orquestacion y Coreografia de Servicios WebOrquestacion y Coreografia de Servicios Web
Orquestacion y Coreografia de Servicios Web
 
Die Anfänge der Ägyptischen Sammlung
Die Anfänge der Ägyptischen Sammlung Die Anfänge der Ägyptischen Sammlung
Die Anfänge der Ägyptischen Sammlung
 
012 Estudio de Caso Etica GCBS. Caso gerente comcel
012 Estudio de Caso Etica GCBS. Caso gerente comcel012 Estudio de Caso Etica GCBS. Caso gerente comcel
012 Estudio de Caso Etica GCBS. Caso gerente comcel
 
Race cycler groups explanation
Race cycler groups explanationRace cycler groups explanation
Race cycler groups explanation
 
French
FrenchFrench
French
 
Quelles sont les motivations des Français qui font le choix de l’investisseme...
Quelles sont les motivations des Français qui font le choix de l’investisseme...Quelles sont les motivations des Français qui font le choix de l’investisseme...
Quelles sont les motivations des Français qui font le choix de l’investisseme...
 
Blake et mortimer 2014 fr
Blake et mortimer 2014 frBlake et mortimer 2014 fr
Blake et mortimer 2014 fr
 
Festivitat de Sant Cosme i Sant Damià i Premis Sanitat Osona 2014
Festivitat de Sant Cosme i Sant Damià i Premis Sanitat Osona 2014Festivitat de Sant Cosme i Sant Damià i Premis Sanitat Osona 2014
Festivitat de Sant Cosme i Sant Damià i Premis Sanitat Osona 2014
 
Innovations™ Magazine April - June 2014 French
Innovations™ Magazine April - June 2014 FrenchInnovations™ Magazine April - June 2014 French
Innovations™ Magazine April - June 2014 French
 
Investigación Cualitativa
Investigación CualitativaInvestigación Cualitativa
Investigación Cualitativa
 
Offre formation digitale Ferret consulting group
Offre formation digitale Ferret consulting groupOffre formation digitale Ferret consulting group
Offre formation digitale Ferret consulting group
 
Eude CEE conseil prud'homme
Eude CEE conseil prud'hommeEude CEE conseil prud'homme
Eude CEE conseil prud'homme
 
Identités visuelles 2001 2014 Ferret consulting group
Identités visuelles 2001 2014 Ferret consulting groupIdentités visuelles 2001 2014 Ferret consulting group
Identités visuelles 2001 2014 Ferret consulting group
 
Microbiología José Muñoz
Microbiología  José MuñozMicrobiología  José Muñoz
Microbiología José Muñoz
 
Consultorioparacajón
ConsultorioparacajónConsultorioparacajón
Consultorioparacajón
 

Similar a Patrones de diseño

Similar a Patrones de diseño (20)

Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
patronesdiseño2009.ppt
patronesdiseño2009.pptpatronesdiseño2009.ppt
patronesdiseño2009.ppt
 
U5.pptx
U5.pptxU5.pptx
U5.pptx
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
CC51A_Clase13-14_Patrones_Arquitectonicos.ppt
CC51A_Clase13-14_Patrones_Arquitectonicos.pptCC51A_Clase13-14_Patrones_Arquitectonicos.ppt
CC51A_Clase13-14_Patrones_Arquitectonicos.ppt
 
chuy
chuy chuy
chuy
 
12-150203140754-conversion-gate02.pptx
12-150203140754-conversion-gate02.pptx12-150203140754-conversion-gate02.pptx
12-150203140754-conversion-gate02.pptx
 
Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]
 
12.diseño basado en patrones
12.diseño basado en patrones12.diseño basado en patrones
12.diseño basado en patrones
 
Diseño basado en patrones
Diseño basado en patronesDiseño basado en patrones
Diseño basado en patrones
 
Ingeniería de requerimientos i
Ingeniería de requerimientos iIngeniería de requerimientos i
Ingeniería de requerimientos i
 
Introducción Patrones de Diseño
Introducción Patrones de DiseñoIntroducción Patrones de Diseño
Introducción Patrones de Diseño
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetos
 
PatronesdeDiseño.pptx.pdf
PatronesdeDiseño.pptx.pdfPatronesdeDiseño.pptx.pdf
PatronesdeDiseño.pptx.pdf
 
Patrones de Diseño en e-learning
Patrones de Diseño en e-learningPatrones de Diseño en e-learning
Patrones de Diseño en e-learning
 
Rssddsd
RssddsdRssddsd
Rssddsd
 
Rssddsd
RssddsdRssddsd
Rssddsd
 
Diseño de patrones
Diseño de patronesDiseño de patrones
Diseño de patrones
 

Más de aleja0940

Tabbed pane y excepciones
Tabbed pane y excepcionesTabbed pane y excepciones
Tabbed pane y excepcionesaleja0940
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuarioaleja0940
 
Renderización en java
Renderización en javaRenderización en java
Renderización en javaaleja0940
 
Ejemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con FactoryEjemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con Factoryaleja0940
 
Proyecto instalacion red local
Proyecto instalacion red localProyecto instalacion red local
Proyecto instalacion red localaleja0940
 
Metodos en java
Metodos en javaMetodos en java
Metodos en javaaleja0940
 

Más de aleja0940 (7)

Tabbed pane y excepciones
Tabbed pane y excepcionesTabbed pane y excepciones
Tabbed pane y excepciones
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuario
 
Renderización en java
Renderización en javaRenderización en java
Renderización en java
 
Java 2 d
Java 2 dJava 2 d
Java 2 d
 
Ejemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con FactoryEjemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con Factory
 
Proyecto instalacion red local
Proyecto instalacion red localProyecto instalacion red local
Proyecto instalacion red local
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
 

Patrones de diseño

  • 1. PATRONES DE DISEÑO Ing. Yeimmy Alejandra Contreras Suarez
  • 2. • El diseño es un modelo del sistema, realizado con una serie de principios y técnicas, que permite describir el sistema con el suficiente detalle como para ser implementado. • Estos esquemas y estructuras son conceptos reusables y nos permiten no reinventar la rueda. Un buen ingeniero reutiliza un esquema de solución ante problemas similares.
  • 3. CONCEPTO • "Una arquitectura orientada a objetos bien estructurada está llena de patrones. La calidad de un sistema orientado a objetos se mide por la atención que los diseñadores han prestado a las colaboraciones entre sus objetos. Los patrones conducen a arquitecturas más pequeñas, más simples y más comprensibles". (Grady Booch)
  • 4. Historia • El concepto de "patrón de diseño" que tenemos en Ingeniería del Software se ha tomado prestado de la arquitectura. En 1977 se publica el libro "A Pattern Language: Towns/Building/Construction", de Christopher Alexander, Sara Ishikawa, Murray Silverstein, Max Jacobson, Ingrid Fiksdahl-King y Shlomo Angel, Oxford University Press. Contiene numerosos patrones con una notación específica de Alexander. • Alexander comenta que “Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo siquiera dos veces de la misma forma”. El patrón es un esquema de solución que se aplica a un tipo de problema, esta aplicación del patrón no es mecánica, sino que requiere de adaptación y matices. Por ello, dice Alexander que los numerosos usos de un patrón no se repiten dos veces de la misma forma. • La idea de patrones de diseño estaba "en el aire", la prueba es que numerosos diseñadores se dirigieron a aplicar las ideas de Alexander a su contexto. El catálogo más famoso de patrones se encuentra en “Design Patterns: Elements of Reusable Object-Oriented Software”, de Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides, 1995, Addison-Wesley, también conocido como el libro GOF (Gang-Of-Four). • Siguiendo el libro de GOF los patrones se clasifican según el proposito para el que han sido definidos: • Creacionales: solucionan problemas de creación de instancias. Nos ayudan a encapsular y abstraer dicha creación. • Estructurales: solucionan problemas de composición (agregación) de clases y objetos. • De Comportamiento: soluciones respecto a la interacción y responsabilidades entre clases y objetos, así como los algoritmos que encapsulan.
  • 5. Pasos para describir un caso • Nombre • Propósito o finalidad • Sinónimos (otros nombres por los que puede ser conocido) • Los patrones de diseño son descripciones de clases cuyas • Problema al que es aplicable instancias colaboran entre sí. Cada • Estructura (diagrama de clases) patrón es adecuado para ser • Participantes (responsabilidad adaptado a un cierto tipo de de cada clase) problema. • Colaboraciones (diagrama de interacciones) • Implementación (consejos, notas y ejemplos) • Otros patrones con los que está relacionado
  • 6. Tipos de Patrones que se manejan en Java • A continuación veremos • Creación, patrones para la aplicación de patrones crear objetos de diseño en Java, • Comportamiento, normalmente se puede patrones para coordinar leer mucho al respecto, la interacción funcional pero lo que realmente entre objetos interesa es saber cuándo • Estructural, patrones para utilizarlos y cómo se manejar relaciones terminan implementando estáticas y estructurales estos conceptos. entre objetos • Sistema, patrones para manejar la interacción a nivel de sistema
  • 7. Patrones de Creación • Este tipo de patrones soporta una de las tareas más comunes en la programación orientada a objetos, la creación de objetos en un sistema. Algunos patrones de este tipo son: • Abstract factory • Builder • Factory Method • Prototype • Singleton
  • 8. PATRON FACTORY • Define una interface para crear objetos, dejando a las subclases decidir la clase específica. Permite delegar la responsabilidad de la instanciación a las subclases. Ventajas: Factory Methods elimina la necesidad de asociar aplicación- clases específicas en el código. Sólo trabajamos con interfaces.
  • 9. Ejemplo • Se nos encarga crear un traductor que devuelva los números del cero al diez en tres idiomas: inglés, español, y alemán. Existen muchísimas maneras de hacer esto. Al final, se desea un método que reciba un entero entre 0 y 10 y que devuelva una cadena con el nombre de dicho número en el idioma que se esté trabajando.
  • 10. Una manera de entrarle al problema podría ser algo así:
  • 11. • Esta solución parece funcionar, y de hecho lo hace. Pero imaginemos que ahora nos dicen que desean la traducción de todos los números? Sin duda el código comenzará a crecer. Y claro, ahora tendremos que agregar código de lógica para cada idioma para escribir números como 752, 1233, etc. • Como nos gusta hacer gala de nuestro enfoque a objetos, los primero que se nos ocurre es una herencia. Definiremos una clase abstracta Traductor, y para cada idioma haremos una subclase de Traductor.
  • 12. • Vamos a crear una clase especializada para diccionario, que se encargará de traducir los números. Tendremos una clase especializada para traducir los números al español, que iría algo así:
  • 13. La clase para el inglés iría
  • 14. • Ahora, en el momento de querer utilizar un diccionario, se llamaría algo así
  • 15. Entonces, la clase MainClient cambiaría un poco y quedaría así:
  • 16. Qué hemos ganado? • Primero, nuestro código es mucho más legible. Segundo es bastante más escalable. Podemos agregar el traductor para el francés muy fácilmente. Tercero hemos escondido la manera en la que traducimos a Tradúceme. Por ejemplo, puede ser que las traducciones a chino las vayamos a traer a un web Service. En ese caso TraductorChino se encargaría de hacer todo el ajetreo de conectarse a internet y buscar el web services, pero los demás ni se enteran. • Pero el Factory Pattern no ha aperecido, Es tiempo de irlo a llamar. Bueno, Traduceme está haciendo algo que no le compete: está eligiendo la instancia de Traductor que quiere usar. Imaginen que se usa el traductor en 100 lugares, entonces en cien lugares se tiene que buscar qué clase de Traductor vamos a instanciar. El patrón de fábrica -factory pattern- nos esconde esa lógica. Vamos a agregar ahora nuestra fábrica de traductores.
  • 17.
  • 18. • ¿Qué hace TraductorFactory? Simplemente elige, en base a los argumentos dados – en este caso el idioma- qué clase de traductor se instanciará. Traduceme de nuevo cambia y quedaría así:
  • 19. • MainClient se ha visto dramáticamente reducido, y su código es muy fácil de leer. Quien quiera usar un traductor simplemente hará llamar a Traduceme. Traduceme sabe el idioma que eligieron, pero no sabe que subclase de Traductor instanciar, pero sabiendo el idioma TraductorFactory sabe exáctamente qué instancia de Traductor crear. Si la aplicación desea cambiar de idioma simplemente le envía otro parámetro a Traduceme y listo. También agregar idiomas es más manejable que antes. • El Factory Pattern esconde al usuario final dle código la desición de qué sublclase instanciar, y promueve el encapsulamiento de las partes más variables del sistema. En términos generales, una fábrica abstracta consiste de las siguientes partes: • Un cliente, que es el que llama a la fábrica (en nuestro caso MainClient). • Una fábrica, que decidé la clase a instanciar (TraductorFactory). • Un prodicto, lo que la fábrica devuelve (para nosotros las instancias de Traductor).