Ho avuto una lotta geek con qualcuno su ciò che il modello di strategia è davvero e ho bisogno di un esperto per risolvere la questione.Qual è la definizione esatta del modello di progettazione della strategia?
Entrambi concordiamo sul fatto che il modello di strategia consente al budello di una classe (ad es. Il comportamento) di essere scambiato a runtime mantenendo la stessa interfaccia. Tuttavia, la sua tesi è che "Affinché [gli algoritmi] siano una strategia, dovresti ottenere gli stessi risultati". La mia tesi è che lo scambio di un "algoritmo" o di una logica di una classe potrebbe significare che i risultati dell'operazione sovrascritta sono diversi, ma che comunque soddisfa lo scopo, l'intento (e la classificazione) del modello di strategia.
Il suo esempio di codice con i commenti:
Con la vostra definizione, eventuali sottoclassi di una classe sarebbe una strategia. Hanno le stesse definizioni di metodo (firme) e sono quindi intercambiabili.
Interface Strategy
{
DoArithmatic(int[] a)
}
Class A : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp += a[i]
}
Class B : Strategy
public int DoArithmaticB(int[]a)
{
int temp = 0;
for(int i =a.length -1; i>-1; i--)
temp += a[i]
}
Class C : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp -= a;
}
int[] a = { 1,2,3 }
ClassA.DoArithmatic(a) = 6
ClassB.DoArithmatic(a) = 6
ClassC.DoArithmatic(a) = -6//This one is not interchangeable
Le prime due sono strategie. Perché per qualsiasi input ti daranno la stessa risposta ESATTA. l'ultimo non lo è. Solo perché ti dà un int non lo rende una strategia. Devono "FARE" la stessa cosa.
Non è possibile utilizzare un termine di astrazione "più alto" solo per renderli una strategia.
Questi fanno tutti "MATH", ma non tutti stanno facendo la "stessa" cosa in un modo diverso. Questa è l'essenza di una strategia.
Quindi, chi ha ragione?
consente agli algoritmi di variare, ma fa variare il loro risultato? vale a dire lascia variare l'implementazione, ma per quanto riguarda l'interfaccia? ecco di cosa si tratta. –
?? la domanda specificava "Siamo entrambi d'accordo sul fatto che il modello di strategia consente che l'intestino di una classe (ad esempio, il comportamento) venga scambiato a runtime mantenendo la stessa interfaccia" –
"variano indipendentemente dai client" ok, ma come fanno variano tra loro (strategia vs. strategia)? Questa è la domanda. – eljenso