b3t5 - Patrones de diseño Flashcards
Principios GRASP (que me suenen)
General Responsability Assignmeten Software Patterns
Patrones de diseñ orientado a objetos
Information expert -> asignación de responsabilidads
Creator
Controller
Indirection
Low coupling
High cohesion
Polymorphism
Protected variations
Pure fabrication
Principios SOLID
Cuáles son y de qué tratan?
S -> Single responsability principle: cada clase tiene una sola responsabilidad. “Una clase sólo tendría que tener una razón para cambiar”
O -> Open / Closed principle: “Una clase debería estar abierta para extenderla, pero no para modificarla”
L -> Liskov sustitution principle: “Las clases derivadas deben poder ser sustituibles por sus clases base”
I -> Interface Segregation principle: Es preferible muchas interfaces específicas que una de caracter general
D -> Dependency Inversion principle: “Depender de las abstracciones y no de las implementaciones”
Nombra algunos patrones de análisis
1.Layered pattern
2.Client-server pattern
3.Master-slave pattern
4.Pipe-filter pattern
5.Broker pattern
6.Peer-to-peer pattern
7.Event-bus pattern
8.Model-view-controller pattern
9.Blackboard pattern
10.Interpreter pattern
Indica los patrones de diseño CREACIONALES
Abstract Factory
Builder
Factory method
Prototype
Singleton
Indica qué patrones de diseño son ESTRUCTURALES
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Adapter
Estos son los patrones de diseño de COMPORTAMIENTO.
No hay que aprenderse que son de esta clasificación, sólo aprenderse los creacionales y estructurales, y los que no sean de esos tipos son de comprtamiento
Chain of responsability
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template method
Vistor
Patrón SINGLETON
Creacional
1 objeto en memoria compartido por todos en la aplicación
Se consigue haciendo que el constructor sea privado y desarrollar un getInstancia que devuelva la instancia estática (creándola si todavía no existe la primera vez, o devolviendo la misma ya creada anteriormente)
Patrón FACTORY METHOD
Creacional
Se crea una clase que se encarga de construir los objetos concretos, devolviéndolo como la superclase, para que el que llama no sabe qué clase hija es.
Patrón FACTORY METHOD
Creacional
Se crea una clase que se encarga de construir los objetos concretos, devolviéndolo como la superclase, para que el que llama no sabe qué clase hija es.
Patrón BUILDER
Creacional
Hay varias clases que construyen cada parte de un objeto complejo y una clase Director que es la que se encarga de llamar a estas clases
Patrón PROXY
Estructural
Para cumplir la S de Solid y no “molestar” a la clase cliente, se crea un proxy que para el cliente es la clase real de negocio, pero en realidad ese proxy hace otras cosas extra (seguridad, … lo que sea) antes de llamar a la case real de negocio.
Para que el cliente no se entere del truco, el proxy tiene que implementar la misma interfaz padre que la clase real de negocio (polimorfismo), y el cliente lo que usa es la interfaz padre.
Patrón COMPOSITE
Estructural
Jerarquia de herencia de Elemento, que heredan Compuesto y Simple. Además Compuesto tiene n Elementos.
De esta forma con esas tres clases se puede hacer muy flexible un diseño de un caso de uso de contenedores y contenidos, tipo sección, divisón, estante, balda, producto
Patrón CHAIN OF RESPONSABILITY
Comportamiento
Es como los filters de JEE antes de los servlets
Cadena de eslabones donde cada eslabon se encarga de hacer algo extra antes de la funcionalidad principal.
Patrón COMMAND
Comportamiento
Lo que serían métodos se convierten en clases.
Se crea una interfaz Command con el método execute(), que implementan distintos clases de comandos concretos como, Print, Save, Search,… que implementan el execute a su manera.
Patrón STRATEGY
Define un interface para un cierto algoritmo de forma que podamos tener por debajo todas sus posibles versiones/implementaciones
Patrón ITERATOR
Comportamiento
Interfaz Iterator para iterar colecciones sin tener que saber cómo se recorre esa colección concreta.
Patrón MEMENTO
Comportamiento
Para poder hacer un undo, como el ctrl+z
Patrón OBSERVER
Comportamiento
Sistema de notificaciones cuando una parte del sistema cambia (eventos), que notifica a clases suscritas
Patrón STATE
Comportamiento
Parecido al COMMAND. Los estados de una clase se convierten en clases, y todos heredan de la clase padre Estado
Así se evitan muchos if
Patrón TEMPLATE METHOD
Comportamiento
Consiste en definir una clase abstracta con el “esqueleto” de un proceso/algortimo. Algunas de las funciones definidas en esa superclase están preparadas para ser sobreescritas en las hijas y asi terminar de definir dicho proceso
Patrón FACADE
Estructural
Proporciona para un subsistema (paquete con clases relacionadas) un punto unico de acceso que ofrece servicios de más alto nivel que los que ofrece cada una de las clases de ese subsistema individualmente
Se combina con un patrón creacional SINGLETON + FACTORY
Patrón ADAPTER
Estructural
Una clase A que quiere usar los métodos de otra B pero no sabe o no le viene bien tal cual están definidos. El adapter será una clase intermedia que le ofrece ese método que le viene bien a A y realizará internamente las llamadas correspondientes a B
Patrón FLYWEIGHT
si creo p.ej. 30.000 instancias de un objeto, y de repente nos damos cuenta de que hay una determinada info que es la misma (común) en todas las instancias, la solución es sacarlo fuera, a una clase externa. Esa info común la vamos a poner toda en una clase única y una única instancia
Patrón ABSTRACT FACTORY
Creacional
el problema a solucionar por este patrón es el de crear diferentes familias de objetos relacionados o que dependen entre sí, sin especificar sus clases concretas
Patrón DECORATOR
Estructural
Sirve para modificar la funcionalidad de un objeto metiéndolo dentro de otro objeto que sí tiene esa funcionalidad
Patrón PROTOTYPE
Delega la clonación en el objeto, implementando una Intefaz que tenga el metodo clonar.
Patrón BRIDGE
El patrón Bridge es un patrón de diseño estructural que separa una abstracción de su implementación, permitiendo que ambas puedan variar independientemente. En pocas líneas, el patrón Bridge permite desacoplar una interfaz o clase abstracta de las clases concretas que la implementan, lo que brinda mayor flexibilidad y extensibilidad al sistema.
Patrón INTERPRETER
El patrón Interpreter es un patrón de diseño comportamental que se utiliza para interpretar y evaluar expresiones en un lenguaje específico. Este patrón es útil cuando se necesita definir una gramática para un lenguaje y luego implementar un intérprete que pueda evaluar o ejecutar expresiones escritas en ese lenguaje
Patrón MEDIATOR
El patrón Mediator (mediador) es un patrón de diseño comportamental que se utiliza para reducir las dependencias directas entre los componentes de un sistema y promover una comunicación más ordenada y flexible entre ellos. Actúa como un intermediario que permite que los objetos se comuniquen entre sí sin que necesariamente se conozcan o referencien directamente.
En resumen, el patrón Mediator funciona de la siguiente manera:
Define un objeto mediador que centraliza la comunicación entre los diferentes componentes (también conocidos como “colegas”) del sistema. El mediador conoce a todos los colegas y les proporciona una interfaz para comunicarse entre sí.
Cada colega dentro del sistema tiene una referencia al mediador y se comunica con otros colegas a través de él, en lugar de comunicarse directamente entre ellos.
Cuando un colega necesita comunicar información o coordinar una acción con otros colegas, lo hace enviando un mensaje o notificación al mediador. El mediador decide cómo y a quién se debe transmitir la información.
El mediador procesa el mensaje y reenvía la información a los colegas relevantes que necesitan conocerla. De esta manera, los colegas no necesitan saber nada sobre los demás, lo que reduce el acoplamiento y aumenta la flexibilidad y extensibilidad del sistema.
Patrón VISITOR
El patrón Visitor (visitante) es un patrón de diseño comportamental que permite agregar nuevas operaciones o funcionalidades a una estructura de objetos sin modificar sus clases. Proporciona una forma de separar los algoritmos de operación de la estructura de los objetos sobre los que operan.
En resumen, el patrón Visitor funciona de la siguiente manera:
Define una interfaz llamada “Visitor” con métodos para cada tipo de elemento que se desea visitar en la estructura de objetos.
Cada clase en la estructura de objetos debe tener un método que acepte un objeto del tipo “Visitor”. Este método se conoce como “accept” o “aceptar” en el patrón.
Crea una o varias clases concretas que implementen la interfaz “Visitor”. Cada clase concreta representa una operación específica que se desea realizar sobre la estructura de objetos.
Cuando se necesita realizar una operación en la estructura de objetos, se crea una instancia del objeto concreto del “Visitor” asociado a esa operación.
Se recorre la estructura de objetos y se llama al método “accept” de cada objeto, pasando como argumento el objeto “Visitor” correspondiente. Cada objeto acepta al “Visitor”, lo que permite que el “Visitor” ejecute la operación adecuada para ese objeto.