2011-11-25 16 views
9

A veces, cuando uso el patrón de estrategia, encuentro que algunas de las implementaciones de algoritmo no requieren la misma lista de parámetros.Variando los parámetros en el patrón de estrategia

Por ejemplo

public interface Strategy{ 
    public void algorithm(int num); 
    } 

    public class StrategyImpl1 implements Strategy{ 
    public void algorithm(int num){ 
     //num is needed in this implementation to run algorithm 
    } 
    } 

    public class StrategyImpl2 implements Strategy{ 
    public void algorithm(int num){ 
     //num is not needed in this implementation to run algorithm but because im using same 
     strategy interface I need to pass in parameter 
    } 

} 

¿Existe un patrón de diseño diferente que debo usar?

Respuesta

9

Esto es generalmente aceptable, aunque si hay parámetros que solo son necesarios para algunas implementaciones, quizás tendría más sentido proporcionarlos al constructor de la implementación (es decir, dejarlos fuera de la interfaz de estrategia), aunque esto puede no ser una opción en tu situación.

También, otra opción es hacer una clase Parameters y tener su método de estrategia simplemente tome uno de estos. Esta clase puede tener getters para varios parámetros (es decir, int num), y si una implementación en particular no necesita usar num, simplemente no llamará al parameters.getNum(). Esto también le da flexibilidad al agregar nuevos parámetros sin tener que cambiar las implementaciones o interfaces de estrategias existentes.

Dicho esto, una clase como Parameters me hace sentir como si hubiera habido una falla de abstracción en otro lugar, aunque a veces solo tienes que hacer que funcione.

Cuestiones relacionadas