Patrones de diseño Public

Patrones de diseño

Miguel Angel Nolasco Cruz
Course by Miguel Angel Nolasco Cruz, updated more than 1 year ago Contributors

Description

Visión general de lo que son los patrones de diseño. Se vera algunos patrones de diseño existentes

Module Information

Tags No tags specified
Los patrones de diseño son un conjunto de reglas, estructuras y herramientas probadas y documentadas por varios de desarrolladores a lo largo de muchos años para solucionar un problema de software.
Show less
Tags No tags specified
Existen 3 tipos de patrones de diseño agrupados según su proposito: Patrones creacionales: utilizados para instanciar objetos, y así separar la implementación del cliente de la de los objetos que se utilizan. con ellos intentamos separar la lógica de creación de objetos y encapsularla. Patrones de comportamiento: se utilizan a la hora de definir como las clases y objetos interaccionan entre ellos. Patrones estructurales: utilizados para crear clases u objetos que incluidos dentro de estructuras más complejas.
Show less
Tags No tags specified
Los mas conocidos son: Abstract Factory: Nos provee una interfaz que delega la creación de un conjunto de objetos relacionados sin necesidad de especificar en ningún momento cuáles son las implementaciones concretas. Factory Method: Expone un método de creación,  delegando en las subclases la implementación de este método. Builder: Separa la creación de un objeto complejo de su estructura, de tal forma que el mismo proceso de construcción nos puede servir para crear representaciones diferentes. Singleton: limita a uno el número de instancias posibles de una clase en nuestro programa, y proporciona un acceso global al mismo. Prototype: Permite la creación de objetos basados en “plantillas”. Un nuevo objeto se crea a partir de la clonación de otro objeto.
Show less
Tags No tags specified
Son patrones que nos facilitan la modelización de nuestros software especificando la forma en la que unas clases se relacionan con otras.   Estos son los patrones estructurales que definió la Gang of Four: Adapter: Permite a dos clases con diferentes interfaces trabajar entre ellas, a través de un objeto intermedio con el que se comunican e interactúan. Bridge: Desacopla una abstracción de su implementación, para que las dos puedan evolucionar de forma independiente. Composite: Facilita la creación de estructuras de objetos en árbol, donde todos los elementos emplean una misma interfaz. Cada uno de ellos puede a su vez contener un listado de esos objetos, o ser el último de esa rama. Decorator: Permite añadir funcionalidad extra a un objeto (de forma dinámica o estática) sin modificar el comportamiento del resto de objetos del mismo tipo. Facade: Una facade (o fachada) es un objeto que crea una interfaz simplificada para tratar con otra parte del código más compleja, de tal forma que simplifica y aísla su uso. Un ejemplo podría ser crear una fachada para tratar con una clase de una librería externa. Flyweight: Una gran cantidad de objetos comparte un mismo objeto con propiedades comunes con el fin de ahorrar memoria. Proxy: Es una clase que funciona como interfaz hacia cualquier otra cosa: una conexión a Internet, un archivo en disco o cualquier otro recurso que sea costoso o imposible de duplicar.
Show less
Tags No tags specified
En este último grupo se encuentran la mayoría de los patrones, y se usan para gestionar algoritmos, relaciones y responsabilidades entre objetos. Command: Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse. Se debe usar cuando: -Se necesiten colas o registros de mensajes. -Se deba tener la posibilidad de deshacer las operaciones realizadas. -Se necesite uniformidad al invocar las acciones. -Se quiera facilitar la parametrización de las acciones a realizar. -Se quiera independizar el momento de petición del de ejecución. -El parámetro de una orden puede ser otra orden a ejecutar. -Se busque desarrollar sistemas utilizando órdenes de alto nivel que se construyen con operaciones sencillas (primitivas). -Se necesite sencillez al extender el sistema con nuevas acciones. Chain of responsibility: se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo. Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena. Se utiliza cuando: -Las peticiones emitidas por un objeto deben ser atendidas por distintos objetos receptores. -No se sabe a priori cual es el objeto que me puede resolver el problema. -Cuando un pedido debe ser manejado por varios objetos. -El conjunto de objetos que pueden tratar una petición debería ser especificado dinámicamente. Se utiliza cuando: -Las peticiones emitidas por un objeto deben ser atendidas por distintos objetos receptores. -No se sabe a priori cual es el objeto que me puede resolver el problema. -Cuando un pedido debe ser manejado por varios objetos. -El conjunto de objetos que pueden tratar una petición debería ser especificado dinámicamente.   Interpreter: Define una representación para una gramática así como el mecanismo para evaluarla. El árbol de sintaxis del lenguaje se suele modelar mediante el patrón Composite. Se utiliza cuando: -Cuando hay un lenguaje que interpretar y se puede interpretar sus palabras como árboles sintácticos abstractos. Para ello, la gramática debe ser simple Iterator: Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica. Se utiliza cuando: -Una clase necesita acceder al contenido de una colección sin llegar a ser dependiente de la clase que es utilizada para implementar la colección, es decir sin tener que exponer su representación interna. -Una clase necesita un modo uniforme de acceder al contenido de varias colecciones. -Cuando se necesita soportar múltiples recorridos de una colección. Mediator: Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí. Se utiliza cuando: -Un conjunto grande de objetos se comunica de una forma bien definida, pero compleja. -Reutilizar un objeto se hace difícil por que se relaciona con muchos objetos. -Las clases son difíciles de reutilizar porque su función básica esta entrelazada con relaciones de dependencia. Memento: Este patrón otorga la capacidad de restaurar un objeto a un estado anterior Se usa cuando: -Se necesite restaurar el sistema desde estados pasados. -Se quiera facilitar el hacer y deshacer de determinadas operaciones, para lo que habrá que guardar los estados anteriores de los objetos sobre los que se opere (o bien recordar los cambios de forma incremental). Observer: Los objetos son capaces de suscribirse a una serie de eventos que otro objetivo va a emitir, y serán avisados cuando esto ocurra. Se usa cuando: -Un objeto necesita notificar a otros objetos cuando cambia su estado. La idea es encapsular estos aspectos en objetos diferentes permite variarlos y reutilizarlos independientemente. -Cuando existe una relación de dependencia de uno a muchos que puede requerir que un objeto notifique a múltiples objetos que dependen de él cuando cambia su estado. State: Permite modificar la forma en que un objeto se comporta en tiempo de ejecución, basándose en su estado interno. Se usa cuando:    -El comportamiento de un objeto depende de un estado, y debe cambiar en tiempo de ejecución según el comportamiento del estado. -Cuando las operaciones tienen largas sentencias con múltiples ramas que depende del estado del objeto. Strategy: Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución. Template Method: Especifica el esqueleto de un algoritmo, permitiendo a las subclases definir cómo implementan el comportamiento real. Visitor: Permite separar el algoritmo de la estructura de datos que se utilizará para ejecutarlo. De esta forma se pueden añadir nuevas operaciones a estas estructuras sin necesidad de modificarlas.
Show less
Tags No tags specified
https://devexperto.com/patrones-de-diseno-software/
Show less
Show full summary Hide full summary