[pyar] Patrones de diseño: Strategy
Luis Andraschnik
luis.andraschnik en gmail.com
Mar Feb 20 16:44:30 -03 2018
Hola grupo!!
Leí sobre el patrón de diseño Strategy, más allá de que puede ser
implementado por funciones sin necesidad de recurrir a clases y que los
patrones de diseño son lenguaje-dependientes, veo que en muchos textos
indica que evita el uso de un largo if ..else if ...,
No obstante no veo que se evite if ...else if ... , salvo que se invoquen
explícitamente las funciones. Por ejemplo :
def leer_png(archivo):
print(''leí {} png".format(archivo))
def leer_jpg():
print('leí {} jpg".format(archivo))
def leer_pdf():
print('leí {} pdf".format(archivo))
def imprimir(file, leer):
leer(file)
Ejemplo de llamado explícito
imprimir("archivo.pdf", leer_pdf)
bárbaro pero muy poco util porque yo no sé de antemano que voy a leer,
entonces redefino imprimir()
def imprimir(archivo_cualquiera):
if archivo_cualquiera.endswith(".jpg"):
leer = leer_jpg
else if archivo_cualquiera.endswith(".png"):
leer=leer_png
else if archivo_cualquiera.endswith(".pdf"):
leer=leer_pdf
leer(archivo_cualquiera)
y entonces dónde es que se evita el if ..else. Y si quiero leer 80 formatos
distintos???
Sé que puede implementarse un diccionario de funciones, similar a una
sentencia switch, pero no creo que se refieran a eso.
Los ejemplos que leí siempre hacen un llamado explícito, pero en realida
dlo que interesa es como seleccionar la función que se pasa como parámetro
...
Me quedé pensando en esto y no le encuentro la solución o estoy
interpretando algo mal.
Saluti
Luis
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180220/f565fda6/attachment.html>
Más información sobre la lista de distribución pyar