2011-11-25 1 views
9

때때로 전략 패턴을 사용할 때 일부 알고리즘 구현에는 동일한 매개 변수 목록이 필요하지 않음을 알 수 있습니다. 예를전략 패턴의 다양한 매개 변수

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 
    } 

} 

를 들어

내가 사용해야 다른 디자인 패턴이 있습니까?

답변

9

일반적으로 일부 구현에서만 필요로하는 매개 변수가있는 경우 구현의 생성자에 매개 변수를 제공하는 것이 좋습니다 (예 : 전략 인터페이스에서 제외). 귀하의 상황에 맞는 선택이 될 수 있습니다.

또 다른 옵션은 Parameters 클래스를 만들고 전략 방법을 사용하여 이들 중 하나를 선택하는 것입니다. 이 클래스는 다양한 매개 변수 (예 : int num)에 대한 getter를 가질 수 있으며 특정 구현에서 num을 사용할 필요가없는 경우 parameters.getNum()을 호출하지 않습니다. 또한 기존 전략 구현이나 인터페이스를 변경하지 않고도 새로운 매개 변수를 추가 할 수있는 유연성을 제공합니다.

그런데, Parameters과 같은 클래스는 어딘가에 추상화 실패가있는 것처럼 느껴지기도합니다. 때때로 가끔은 그냥 작동시켜야한다고 생각합니다.