Está en la página 1de 12

Patrones de Diseño

Diseño y Desarrollo de Sistemas 24/10/2012

.............CONTENIDO CONTENIDO ...... 2 Concepto de Patrón de Diseño ................ 3 Importancia de aprender sobre patrones de diseño ......................................................... 9 ....................................... 4 Banda de los Cuatro (23 patrones de diseño) ...................... 1 Historia de los Patrones de Diseño .......................................................... 5 Patrón de Diseño (Factory Method – Método Fabrica) ...

entre ellos están las ideas de Alexander las cuales se utilizaron para crear un lenguaje de patrón. Hasta que en Abril de 1994 se decidió crear una conferencia internacional especializada en los patrones. 1994 Durante los años 1990 y 1992 se realizaron varios trabajos de workshops sobre el tema.Historia de los Patrones de Diseño Mediados de los 60´ A mediados de los años 60 gracias a los trabajos del arquitecto Christopher Alexander. el cual fue considerado como el mejor libro de orientación a objetos. la cual desde ese año tiene lugar dos veces al año. 1995 El concepto de patrón de diseño. . los cuales fueron los que ayudaron a dar el concepto de lo que es un patrón con el significado que hoy se le da en el mundo del software más concretamente en el área de la tecnología de objetos. se hizo popular dentro del mundo del desarrollo del software en 1995 con la publicación del libro Desing Patterns: Elements of Reusable Object-Oriented Software también conocido como el libro de GoF.

o Reusable.  También se lo considera una solución probada que se puede aplicar con éxito a un determinado tipo de problemas que aparecen repetidamente en el desarrollo de sistemas de software. . cada patrón describe un problema que ocurre una y otra vez en nuestro entorno. la solución es la misma para problemas similares. ha valido para resolver el problema de diseños pasados. concepto que es valido para patrones de diseño orientado a objetos. si hacer lo mismo dos veces.Concepto de Patrón de Diseño  Un patrón es una solución a un problema de diseño no trivial que es: o Efectiva.  Según Christopher Alexander. de tal modo que se pueda aplicar esta solución un millón de veces.  Van más bien en la línea de un esqueleto básico que cada desarrollador luego adapta a sus necesidades y a las peculiares características de su aplicación. así como la solución a este problema.

A pesar de todo ninguna solución es perfecta. es decir que al momento de observar código ajeno si el dueño de dicho código te comunica que patrón esta utilizando será mas fácil comprender dicho código. . se puede decir que incluso puedes identificar que soluciones funcionan de manera correcta y cuales como en ocasiones resultan en mas problemas de los que solucionan. pudiendo identificar cuando o dónde usar esas soluciones.Importancia de aprender sobre patrones de diseño Es importante el aprender sobre patrones de diseños ya que estos son una guía la cual nos ayuda a resolver problemas que se presenten comúnmente en programación. al aprenderlos se podrá identificar de mejor manera los problemas que se podrían tener antes de su aparición. al momento de encontrar problemas en tu propio código al igual que su solución. Como ultimo punto. de la misma manera se podrá reconocer cual es la mejor solución aplicada al problema que se presente. pero al aprender sobre patrones de diseños podrás identificar los problemas y las soluciones mas flexibles al igual que las consecuencias que tendrás en el futuro. el saber de patrones de diseño ayudara a tener algo en común con otros programadores. En especial si ya llevas un tiempo sin saber utilizando patrones de diseño de los cuales lo mas seguro no sabes ni su nombre.

Banda de los Cuatro (23 patrones de diseño) La banda de los cuatro conformada por:     Erich Gamma Richard Helm Ralph Jonhson John Vlissides Clasifica a los patrones de diseños en 23 los cuales a su vez se clasifican en tres grandes grupos los cuales mencionaremos a continuación: Patrones Creacionales Factory Method Abstract Factory Patrones de Comportamiento Patrones Estructurales Adapter Bridge Interpreter Template Method Builder Prototype Chain of responsability Command Composite Decorator Singleton Iterator Mediator Memento Facade Flyweight Proxy Observer State Strategy Visitor .

de modo que el mismo proceso de construcción pueda crear representaciones diferentes. Prototipo Instancia Unica • Asegure que una clase sólo tiene una instancia . pero dejar a subclases decidir sus instancias . . Constructor • Separa la construcción de un objeto complejo de su representación . Fabrica Abstracta • Proporciona un interfaz para crear las familias de objetos relacionados o dependientes sin especificar sus clases concretas. • Crea nuevos objetos creándolos de una instancia ya existente.Estos 23 patrones en español. y un pequeño concepto: Patrones Creacionales: Método Fabrica • Define un interfaz para crear un objeto. El método de la fábrica deja a una clase la creación de ejemplares o copias a subclases. y proporcionarle un punto global de acceso a dicha instancia.

permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma. Iterador •Proporciona un modo de tener acceso a los elementos de un objeto agregado secuencialmente sin exponer su representación subyacente. La estrategia deja al algoritmo ( método ) variar por separado de los clientes ( objetos ) que lo usan o invocan. y los hace permutables. Orden •Encapsula una operación en un objeto. •Define un objeto que coordine la comunicación entre objetos de distintas clases. captura y externaliza el estado interno de un objeto de modo que el objeto pueda ser restaurado a este estado más tarde. Mediador Recuerdo •Sin violar encapsulación. aplazando algunos pasos a subclases. Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada. •Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.Patrones de Comportamiento: •Considerando un lenguaje . Intérprete Método Plantilla •Define el esqueleto de un algoritmo en una operación. •Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera. define un representación para su gramática con un intérprete que usa la representación para interpretar sentencias en el mismo lenguaje. encapsula cada uno. pero que funcionan como un conjunto. todos sus dependientes sean notificados y puestos al día automáticamente. Observador •Define de uno a varios la dependencia entre objetos de modo que cuando se produce un cambio de estado del objeto. Cadena de Responsabilida d •Encadena los objetos de encubrimiento y pasa la petición a lo largo de la cadena hasta que un objeto la maneja. Estado Estrategia •Define una familia de algoritmos ( métodos ). Visitante . El Método de Plantilla deja a subclases redefinir los ciertos pasos de un algoritmo sin cambiar la estructura del algoritmo.

Objeto Compuesto • El objeto compuesto permite tratar a jerarquías de objetos en individuales y composiciones de objetos uniformemente como si se tratase de objetos simples. La fachada define un interfaz de nivel más alto que hace el subsistema fácil de usar. debido a que la interfaces es incompatibles con dicha clase. Los decoradores proporcionan una alternativa flexible a la subclasificación para ampliar la funcionalidad.Patrones Estructurales: Adaptador • Convierte la interfaz de una clase en otra interfaz que otra clase puede usar . Envoltorio Fachada Peso Ligero • Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información. • Proporciona un interfaz unificada a un juego de interfaces en un subsistema. • Mantiene un representante de un objeto. • Adjunta responsabilidades adicionales a un objeto dinámicamente. Proxy . Puente • Desacopla una abstracción de su implementación de modo que los dos puedan variar por separado.

Es una simplificación del Abstract Factory. De esta manera tenemos mayor flexibilidad a la hora de crear objetos que hacerlo de manera directa. porque las posibles subclases del creador deben poder especificar subclases del producto para utilizar. en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos. . o cuando una clase quiere que sus sub clases especifiquen el tipo de objetos que se crearan. pero el tipo concreto de producto no debe ser forzado en las subclases del creador. tendremos uno u otro comportamiento. Define una interfaz para crear un objeto pero deja a las subclases el trabajo de decir que clase instanciar. Partes: Las clases principales en este patrón son el creador y el producto. según usemos una u otra hija de esta clase abstracta. de esta manera una clase delega responsabilidad a una o un grupo de sub clases. El creador necesita crear instancias de productos.Patrón de Diseño (Factory Method – Método Fabrica) Concepto: El patrón de diseño Factory. esta basado en la instancia de objetos en tiempo de ejecución. Generalmente este patrón se utiliza cuando no se puede anticipar el tipo de objeto que se deberá crear. el patrón Factory permite que una clase difiera la instansación a otra subclase. Factory Method consiste en utilizar una clase constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo determinado.

echo "<br >". sin importar donde desee conectarme concentraré la instancia en una clase llamada BaseDeDatos. Este método abstracto se define para que devuelva un producto. BaseDeDatos::cargar("PostgreSQL"). } else { throw new Exception("No existe la clase '$tipo'"). <?php class MySQL{ public function __construct(){ echo "Instancio MySQL". "\n". . } } } BaseDeDatos::cargar("MySQL"). } } abstract class BaseDeDatos{ public static function cargar($tipo){ try { if (class_exists($tipo)) { return new $tipo..La solución para esto es hacer un método abstracto (el método de la fábrica) que se define en el creador. Las subclases del creador pueden sobrescribir este método para devolver subclases apropiadas del producto. $e->getMessage().. Ejemplo: He aquí un ejemplo con varias clases para conectarse a diferentes base de datos. } } catch (Exception $e) { echo 'Excepción capturada: '. echo "<br >". } } class PostgreSQL{ public function __construct(){ echo "Instancio PostgreSQL".

?> Resultado: Instancio MySQL Instancio PostgreSQL Excepción capturada: No existe la clase 'Oracle' Como resumen podemos decir que todo queda centralizado en la clase BaseDeDatos. y como puede observarse realiza una pequeña validación antes de realizar la instancia.BaseDeDatos::cargar("Oracle"). .