Tuve una discusión geek con alguien sobre cuál es el patrón de estrategia realmente y necesito un experto para resolver el asunto.¿Cuál es la definición exacta del patrón de diseño de la estrategia?
Ambos estamos de acuerdo en que el patrón de estrategia permite que las agallas de una clase (por ejemplo, el comportamiento) se intercambien en el tiempo de ejecución mientras se mantiene la misma interfaz. Sin embargo, su argumento es que "para que [los algoritmos] sean una estrategia, tendrías que obtener los mismos resultados". Mi opinión es que intercambiar un "algoritmo" o lógica de una clase podría significar que los resultados de la operación anulada son diferentes, pero que aún cumple con el propósito, intención (y clasificación) del patrón de estrategia.
Su ejemplo de código con comentarios:
Por su definición, cualquier subclase de una clase sería una estrategia. Tienen las mismas definiciones de método (firmas) y, por lo tanto, son intercambiables.
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
Las dos primeras son estrategias. Porque para cualquier aporte, le darán la misma respuesta EXACTA. el último no es El hecho de que te dé un int no lo convierte en una estrategia. Tienen que "HACER" lo mismo.
No se puede utilizar un término de abstracción "superior" solo para convertirlos en una estrategia.
Todos estos hacen "MATH" pero no todos hacen lo "mismo" de otra manera. Esa es la esencia de una estrategia.
Entonces, ¿quién es?
permite que los algoritmos varíen, pero ¿deja que varíe el resultado? es decir: permite variar la implementación, pero ¿qué pasa con la interfaz? De eso se trata la pregunta. –
?? la pregunta expresada específicamente "Ambos acordamos que el patrón de estrategia permite que las agallas de una clase (por ejemplo, el comportamiento) se intercambien en tiempo de ejecución mientras se mantiene la misma interfaz" –
"varían independientemente de los clientes" está bien, pero ¿cómo lo hacen? varían entre ellos (estrategia vs. estrategia)? Esa es la pregunta. – eljenso