Una colección de patrones de diseño y modismos en Python.
Recuerde que cada patrón tiene sus propias compensaciones. Y debe prestar más atención a por qué elige un determinado patrón que a cómo implementarlo.
Patrones de creación :
Patrón | Descripción |
---|---|
fábrica_abstracta | utilizar una función genérica con fábricas específicas |
borgoña | un singleton con estado compartido entre instancias |
constructor | en lugar de utilizar varios constructores, el objeto constructor recibe parámetros y devuelve objetos construidos |
fábrica | delegar una función/método especializado para crear instancias |
evaluación_perezosa | patrón de propiedad evaluado de forma perezosa en Python |
piscina | preinstanciar y mantener un grupo de instancias del mismo tipo |
prototipo | utilizar una fábrica y clones de un prototipo para nuevas instancias (si la creación de instancias es costosa) |
Patrones estructurales :
Patrón | Descripción |
---|---|
3 niveles | datos<->lógica empresarial<->separación de presentación (relaciones estrictas) |
adaptador | adaptar una interfaz a otra usando una lista blanca |
puente | un intermediario cliente-proveedor para suavizar los cambios en la interfaz |
compuesto | permite a los clientes tratar objetos y composiciones individuales de manera uniforme |
decorador | ajustar la funcionalidad con otra funcionalidad para afectar las salidas |
fachada | usar una clase como API para varias otras |
peso mosca | reutilizar de forma transparente instancias existentes de objetos con estado similar/idéntico |
controlador_frontal | solicitudes de un solo controlador que llegan a la aplicación |
mvc | modelo<->vista<->controlador (relaciones no estrictas) |
apoderado | un objeto canaliza operaciones hacia otra cosa |
Patrones de comportamiento :
Patrón | Descripción |
---|---|
cadena_de_responsabilidad | aplicar una cadena de controladores sucesivos para intentar procesar los datos |
catalogar | Los métodos generales llamarán a diferentes métodos especializados según el parámetro de construcción. |
método_encadenamiento | continuar la devolución de llamada siguiente método de objeto |
dominio | agrupar un comando y argumentos para llamar más tarde |
iterador | atravesar un contenedor y acceder a los elementos del contenedor |
iterador (alt. impl.) | atravesar un contenedor y acceder a los elementos del contenedor |
mediador | un objeto que sabe cómo conectar otros objetos y actuar como proxy |
recuerdo | generar un token opaco que se puede usar para volver a un estado anterior |
observador | proporcionar una devolución de llamada para notificación de eventos/cambios en los datos |
publicar_suscribir | una fuente distribuye eventos/datos a más de 0 oyentes registrados |
registro | realizar un seguimiento de todas las subclases de una clase determinada |
especificación | Las reglas de negocio se pueden recombinar encadenando las reglas de negocio usando lógica booleana. |
estado | La lógica se organiza en un número discreto de estados potenciales y el siguiente estado al que se puede pasar. |
estrategia | operaciones seleccionables sobre los mismos datos |
plantilla | un objeto impone una estructura pero requiere componentes conectables |
visitante | invocar una devolución de llamada para todos los elementos de una colección |
Diseño para patrones de comprobabilidad :
Patrón | Descripción |
---|---|
inyección_dependencia | 3 variantes de inyección de dependencia |
Patrones fundamentales :
Patrón | Descripción |
---|---|
patrón_delegación | un objeto maneja una solicitud delegando a un segundo objeto (el delegado) |
Otros :
Patrón | Descripción |
---|---|
pizarra | modelo arquitectónico, reunir diferentes conocimientos de subsistemas para construir una solución, enfoque de IA: patrón sin grupo de cuatro |
búsqueda_grafo | algoritmos gráficos: patrón sin grupo de cuatro |
hsm | máquina de estados jerárquica - patrón sin grupo de cuatro |
Patrones de diseño en Python por Peter Ullrich
Sebastian Buczyński: ¿Por qué no necesitas patrones de diseño en Python?
¡No necesitas eso!
Bibliotecas conectables a través de patrones de diseño
Cuando se agrega o modifica una implementación, revise las siguientes pautas:
Agregue una descripción a nivel de módulo en forma de cadena de documentación con enlaces a las referencias correspondientes u otra información útil.
Agregue la sección "Ejemplos en el ecosistema Python" si conoce alguno. Muestra cómo se podrían aplicar patrones a problemas del mundo real.
fachada.py tiene un buen ejemplo de descripción detallada, pero a veces la más corta como en template.py sería suficiente.
Para ver versiones compatibles con Python 2 de algunos patrones, consulte la etiqueta heredada.
Cuando todo lo demás esté hecho, actualice la parte correspondiente de README.
Ejecute lo siguiente antes de enviar un parche
black .
Esto arruina tu código.Entonces cualquiera de las dos:
tox
o tox -e ci37
Esto ejecuta pruebas unitarias. consulte tox.ini para obtener más detalles../lint.sh
Este script filtrará y probará su código. Este script refleja las acciones de canalización de CI. También puedes ejecutar los comandos flake8
o pytest
manualmente. Se pueden encontrar ejemplos en tox.ini
.
Puede clasificar problemas y solicitudes de extracción, que pueden incluir la reproducción de informes de errores o solicitar información vital, como números de versión o instrucciones de reproducción. Si desea comenzar a clasificar problemas, una forma sencilla de hacerlo es suscribirse a patrones de Python en CodeTriage.
La gente de Mutable.ai ha creado un asistente de inteligencia artificial que reconoce la base del código. Probar