{"id":23529455,"url":"https://github.com/tyronejosee/prototype_design-patterns","last_synced_at":"2026-02-09T21:03:13.963Z","repository":{"id":268449237,"uuid":"904397612","full_name":"tyronejosee/prototype_design-patterns","owner":"tyronejosee","description":"Prototype for design patterns and their implementations in Python. Contains practical examples and explanations to help understand and apply these patterns in Python projects.","archived":false,"fork":false,"pushed_at":"2025-01-24T22:41:03.000Z","size":1337,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-24T23:18:39.119Z","etag":null,"topics":["design-patterns","markdwon","python","singleton"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tyronejosee.png","metadata":{"files":{"readme":"README-es.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-16T20:10:06.000Z","updated_at":"2025-01-24T22:41:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"0a58cd68-297f-49fd-9a2e-e6a2651e58c7","html_url":"https://github.com/tyronejosee/prototype_design-patterns","commit_stats":null,"previous_names":["tyronejosee/prototype_design-patterns"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyronejosee%2Fprototype_design-patterns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyronejosee%2Fprototype_design-patterns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyronejosee%2Fprototype_design-patterns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyronejosee%2Fprototype_design-patterns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tyronejosee","download_url":"https://codeload.github.com/tyronejosee/prototype_design-patterns/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239226459,"owners_count":19603270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-patterns","markdwon","python","singleton"],"created_at":"2024-12-25T21:11:53.354Z","updated_at":"2026-02-09T21:03:13.862Z","avatar_url":"https://github.com/tyronejosee.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **Patrones de Diseño**\r\n\r\n![Design Patterns: Elements of Reusable Object-Oriented Software](./main.webp)\r\n\r\n\u003e *\"Design Patterns: Elements of Reusable Object-Oriented Software\"* de **Erich Gamma**, **Richard Helm**, **Ralph Johnson** y **John Vlissides**, conocidos como el **\"Gang of Four\" (GoF)**.\r\n\r\nLos patrones de diseño son **soluciones reutilizables** a problemas comunes que surgen durante el desarrollo de software. Ayudan a los desarrolladores a estructurar su código de manera **más flexible, reutilizable y mantenible**.\r\n\r\n## **Patrones Creacionales**\r\n\r\nEstos patrones se enfocan en la creación de objetos, con el objetivo de hacerla flexible y eficiente.\r\n\r\n- **Singleton:** Asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.\r\n- **Factory Method (Método de Fábrica):** Permite crear objetos sin especificar la clase exacta del objeto a crear.\r\n- **Abstract Factory (Fábrica Abstracta):** Proporciona una interfaz para crear familias de objetos relacionados sin especificar sus clases concretas.\r\n- **Builder (Constructor):** Separa la construcción de un objeto complejo de su representación, permitiendo diferentes representaciones del mismo tipo de objeto.\r\n- **Prototype (Protótipo):** Permite crear nuevos objetos copiando un objeto existente, en lugar de crear uno nuevo desde cero.\r\n\r\n## **Patrones Estructurales**\r\n\r\nEstos patrones tratan sobre cómo se componen las clases y los objetos para formar estructuras más grandes manteniendo flexibilidad y eficiencia.\r\n\r\n- **Adapter (Adaptador):** Permite que interfaces incompatibles trabajen juntas.\r\n- **Bridge (Puente):** Desacopla una abstracción de su implementación, permitiendo que ambas evolucionen independientemente.\r\n- **Composite (Composición):** Permite tratar objetos individuales y composiciones de objetos de manera uniforme.\r\n- **Decorator (Decorador):** Añade responsabilidades adicionales a un objeto de manera dinámica.\r\n- **Facade (Fachada):** Proporciona una interfaz simplificada a un conjunto de interfaces en un subsistema.\r\n- **Flyweight (Peso Ligero):** Comparte objetos de manera eficiente para ahorrar memoria, especialmente cuando se crean muchos objetos similares.\r\n- **Proxy (Proxy):** Controla el acceso a un objeto, a menudo añadiendo funcionalidades adicionales como control de acceso o almacenamiento en caché.\r\n\r\n## **Patrones de Comportamiento**\r\n\r\nEstos patrones se enfocan en cómo los objetos interactúan y se comunican entre sí.\r\n\r\n- **Chain of Responsibility (Cadena de Responsabilidad):** Pasa una solicitud a lo largo de una cadena de manejadores, donde cada uno decide si manejarla o pasarla a otro.\r\n- **Command (Comando):** Encapsula una solicitud como un objeto, permitiendo pasar parámetros a clientes con diferentes solicitudes.\r\n- **Interpreter (Intérprete):** Proporciona una manera de evaluar sentencias en un lenguaje, a menudo utilizado en compiladores o intérpretes de lenguajes.\r\n- **Iterator (Iterador):** Permite acceder a los elementos de una colección sin exponer su estructura interna.\r\n- **Mediator (Mediador):** Define un objeto que centraliza la comunicación entre varios objetos, promoviendo un bajo acoplamiento.\r\n- **Memento (Memento):** Permite capturar y restaurar el estado de un objeto sin violar la encapsulación.\r\n- **Observer (Observador):** Define una dependencia uno a muchos entre objetos, de modo que cuando un objeto cambia de estado, todos los objetos dependientes son notificados y actualizados automáticamente.\r\n- **State (Estado):** Permite que un objeto altere su comportamiento cuando cambia su estado interno.\r\n- **Strategy (Estrategia):** Define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables.\r\n- **Template Method (Método de Plantilla):** Define el esqueleto de un algoritmo en un método, permitiendo que las subclases implementen algunos pasos.\r\n- **Visitor (Visitante):** Añade operaciones a una estructura de objetos sin modificar los objetos en sí.\r\n\r\n### **Beneficios**\r\n\r\n- **Reutilización de Código:** Proporcionan soluciones comprobadas que pueden aplicarse a diferentes contextos.\r\n- **Mantenibilidad:** Facilitan la comprensión y modificación de sistemas al estandarizar soluciones.\r\n- **Mejora en la Comunicación:** Ayudan a los desarrolladores a hablar el mismo \"lenguaje\" al referirse a soluciones comunes.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyronejosee%2Fprototype_design-patterns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftyronejosee%2Fprototype_design-patterns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyronejosee%2Fprototype_design-patterns/lists"}