Va bene passare il cliente concreto a un metodo sulla strategia concreta?

2

Quando usi lo schema di strategia, è buona norma passare this a un metodo su this.strategy ?

Ho un'interfaccia di strategia con una chiamata, TakeAction . L'idea è che TakeAction decida quali tra le diverse azioni possibili eseguite dal Cliente e poi chiama il metodo appropriato sul client. Pertanto, in una strategia concreta, il metodo TakeAction potrebbe essere simile a:

void TakeAction(IAbstractClient client)
{
    if (client.IsBlah()) client.UnBlah(this.BlahValue1, this.BlahValue2);
    else if (client.CanFoo()) client.Foo(this.FooValue);
    else if (this.ShouldTwiddle()) client.Twiddle();
}

E nel client, la chiamata assomiglia a:

this.strategy.TakeAction(this);

Questa è una buona forma? O c'è un modo migliore per farlo? (Restituire una classe con un enum che descrive l'azione e i valori da passare ad esso sembrava eccessivo).

    
posta Robert Gowland 12.12.2011 - 15:30
fonte

1 risposta

4

Il passaggio di this a una strategia è perfetto. Ciò ti consente di utilizzare il polimorfismo come previsto.

Finché la classe implementa l'interfaccia IAbstractClient , sei a posto.

    
risposta data 12.12.2011 - 15:46
fonte

Leggi altre domande sui tag