2011-11-25 12 views
9

Czasami przy korzystaniu ze wzorca strategii stwierdzam, że niektóre implementacje algorytmów nie wymagają tej samej listy parametrów.Różne parametry w wzorcu strategii

Na przykład

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 
    } 

} 

Czy istnieje inny wzorzec projektowania należy używać?

Odpowiedz

9

Jest to ogólnie do przyjęcia, chociaż jeśli istnieją parametry, które są potrzebne tylko w niektórych implementacjach, być może byłoby bardziej sensowne dostarczenie ich do konstruktora implementacji (tj. Pozostawienie ich poza interfejsem strategii), chociaż może to nie być być opcją w twojej sytuacji.

Kolejną opcją jest utworzenie klasy Parameters i zastosowanie metody strategii po prostu wykonaj jedną z nich. Ta klasa może następnie mieć moduły pobierające dla różnych parametrów (tj. int num), a jeśli konkretna implementacja nie musi używać num, to po prostu nie wywoła ona parameters.getNum(). Daje to również elastyczność w dodawaniu nowych parametrów bez konieczności zmiany jakichkolwiek istniejących implementacji strategii lub interfejsów.

Z tym stwierdzeniem klasa taka jak Parameters pozostawia mnie w przekonaniu, że gdzieś indziej doszło do porażki abstrakcji, chociaż czasami trzeba ją sprawić.

Powiązane problemy