Patrones de diseño estructurales Flashcards
Para que sirven los patrones estructurales
Para saber como utilizas objetos
Lista todos los patrones estructurales
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Descibe el uso de el patron adapter
Se utiliza cuando tenemos un cliente viejo y un cliente nuevo quiere comunicarse con este o viceversa, el adaptador va a convertir las peticiones a la manera en que se necesite, por ejemplo si tenemos dos compañias que se acaban de comprar y tenemos un sistema que da de alta a un empleado con id, nombre + apellido paterno + apellido materno, y el otro sistema recibe el nombre en campos separados, ese seria una buena opcion para utilizar el adapter ya que no modifcariamos nada y el adaptador transformaria las peticiones a como la requiere el target
Describe tecnicamente el patron adapter, que conceptos usa para lograr su objetivo y por que no es un decotator
Basicamente utiliza inyeccion de dependencias, por ejemplo tenemos un cliente que implementa una interfaz A con los metodos getID y getName, por otro lado tenemo otro cliente que no implementa esa interfaz, lo unico que tenemos que hacer es que, sin modifcar el codigo de la clase que no implementa la interfaz A, adaptar para que otra clase sea la que implemente la interfaz y se aline y le pasemos a esta clase por medio de inyeccion de depencias en su constructor, ya dentro de esta clase mapeamos los campos uno a uno o hacemos la adaptacion necesaria por medio de la instancia de la clase que no lo implemente, por otro lado si agregamos funcionalidad estariamos hablando de algun tipo de decorator y no de un adapter
Cual es la diferencia entre Adapter y bridge
Adapter es para adaptar sistemas legados y bridge la intencion de adaptar esta desde el inicio
Describe el patron bridge
Este patron usa composision (has a ) como puente entre las dos jerarquias No sirve para cuando no sabemos que es lo que vamos a construir, nos ayuda por que nos da la facilidad de adaptar las diferentes partes de una manera independiente, en bridge hay dos lados, y en este patron se espera que ambos lados puedan ser modificados independientemente, es muy parecido al adapter ya que tambien adapta, solo que adapta codigo nuevo y es una desicion preconcebida y no resultado de algo externo, por ejemplo si tenemos Color y Forma, podemos hacer un puente que nos permita modificar Color puente Forma, de esta manera podemos adaptar cualquier color con cualquier forma y podemos cambiar solo un lado del puente o lo dos, como se puede ver tenemos Shape y tenemos Color y ambos se pueden mover independientemente y se pueden convinar, en realidad el puente esta entre dos cosas que necesitamos que se adapten a diferentes circunstancias pero sin la necesidad de conocer de entrada todos los detalles, por ejemplo los drivers de JDBC. otro ejemplo pudiera ser que tuvieramos la necesidad de tener Formaters(txt, xml) y Printers(web, html), los formaters son com
Que es un indicativo de que necesitamos un birdge pattern
Basicamente si tenemos una sola jerarquia que se esta haciendo grande con cada cambio que introduciomos, ese podria ser un indicativo de que podriamos implementar el patron, como por ejemplo tenemos Shape–Circulo–Triangulo–CirculoRojo–TrianguloRojo etc… Como vemos si queremos introducir TrianguloAmarillo y CirculoAmarillo tendrian que ser dos clases diferentes que tal vez lo unico que cambie es que estan en la otra jerarquia, lo que se debe de hacer es partir la jerarquia en dos una para la shape y otra para el color
Describe el composite pattern
Es una estructura tipo tree lo cual nos va a permitir que tratemos a todos los objetos como si fueran el mismo, no importando que sean ramas o composites(es una rama pero tambien tiene hijos), crea una jerarquia de objetos reflejados independientes, todos los cuales comparten una interfaz comun
Da un ejemplo de composite
Por ejemplo en java tenemos los maps y tenemos el metood putAll, imaginemos que tenemos un objeto mapa que es usuarios, otro que es permisos y otro que es la seguridad, podemos putAll, los usuarios y permisos en este ultimo mapa, es decir estamos tratando de manera igual a los objetos no importando que sean, otro ejemplo seria un menu, en el cual podemos agregar sub menus y menus de la misma manera
Descibe el patron decorator
Nos sirve para agregar funcionalidad por medio de la creacion, sin tener que modificar a los demas clientes de este cliente, sigue el principio de single responsability
Describe el patron facade
Este patron nos ayuda a simplificar el uso de una api al no exponer demasiados detalles y solo hacer una operacion atomica que englobe todos los detalles, es buena para refactorizar, solo usa composition, facade es mas una buena practica que patron, es estandar
Describe el patron flyweight
Se utitliza con objetos inmutables, es decir finales y sin setters, solo lo inicializamos por medio de su constructor o algun mecanismo, se utiliza como cache, un ejemplo es el pool de literales de un string, el cual es accedido por medio de el metodo intern(), lo cual nos va a permitir buscar un cache si ese literal ya existe, es decir es una manera de buscar por key para no crear el objeto si ya existe, por ejemplo imaginemos que somos amazon y cada vez que nos piden un producto creamos ese producto aunque sea el mismo producto que alguien mas utilizo, lo que hace este patron es que va a tener en cache los objetos y los va a estar reutilizando, es como git que reutiliza todos lo que no se ha modificado y solo añade lo que se modifico, se usa para optimizar memoria
Decribe el patron proxy
Cuando queramos interceptar nuestros objetos y hacerle cierto tratamiento, como por ejemplo agregarle seguridad, no permitir que haga alguna operacion, por ejemplo tenemos una interfaz que hace get y hace post y tenemos un cliente que solo debe de hacer gets, lo que podemos hacer es que desde el cliente mandamos a llamar al proxy y este va a implementar la otra intefaz completa pero podemos decir que si viene un metodo post lance una excepcion y sin mover nada de la interfaz original, el proxy es el objeto que nos regresa, una instancia que es una copia de lo que se esta ejecutando en otra maquina, por ejemplo Twiter y como poner un tweet, nosotros tenemos una copia de esa funcionalidad y podemos hacer lo que dijimso, tambien es cuando queremos utilizar una interfaz diferente con una interfaz existente para por ejemplo checar alho, un ejemplo seria Car y Drvier y podemos poder un CarProxy para que verifique que la edad del Driver es mayor a 16