Il seguente esempio è un modello di strategia?

0

Nel mio problema avevo molti oggetti con un comportamento leggermente diverso, ma attributi e metodi identici con interfacce identiche. Le varianti degli oggetti erano abbastanza numerose e non volevo creare una classe per ognuna di esse, con tanto codice di ripetizione.

Ho aggirato la creazione di molte derivate classificate dal seguente costrutto (pseudocode per abbreviazione)

#aTP = all the parameters
def _function_version_1(aTP):
    ...

...

def _function_version_BIG(aTP):
    ...

class BaseClass(object):
    _typesOfImplementation = {'ONE' : _function_version_1,
                               ...
                              'BIG' : _function_version_BIG,
                             }

    def __init__(self, type, ...)
        ...
        if type not in _typesOfImplementation:
            raise Exception('Unknown type')
        # respective function for this object
        self.function = lambda aTP:BaseClass._typesOfImplementation[type](self, aTP)

Questa è ancora un'implementazione del modello di strategia, anche se non ho usato le classi per la rispettiva versione della funzione (che sarebbe stata di nuovo un pessimo gruppo di classi)?

    
posta Lord_Gestalter 24.04.2014 - 07:34
fonte

1 risposta

3

Direi di no. Uno dei punti chiave del modello strategico è la capacità di aggiungere nuovi tipi di strategie senza dover cambiare la classe base. Nel tuo caso, dovresti aggiungere un nuovo elemento in _typesOfImplementation , cambiando così la classe base. Inoltre, con il modello strategico, puoi cambiare la strategia durante la vita della classe base. Il tuo codice ha la strategia cablata durante la costruzione della base.

    
risposta data 24.04.2014 - 07:41
fonte

Leggi altre domande sui tag