[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