0

저는 디자인 패턴에있어 초보자입니다. 이 같은 전략 패턴을/구현에 대한 어떤 생각이 :기본 전략을 사용한 전략 패턴

 
public class SomeClass { 

    private Strategy strategy = new DefaultStrategy(); 

    public void provideCustomStrategy(Strategy strategy) { 
     this.strategy = strategy; 
    } 
} 

이 느슨한 결합과 전략 패턴과 DI의 다른 모든 혜택을 보장합니다. 동시에 사용자가 전략을 제공하도록 강요하지 않으며, 사용자가 코너 사례 등을위한 맞춤 전략을 제공하기로 결정할 수 있습니다. 전략을 생성자에게 제공하면 생성자 삽입과 동일한 목표를 달성 할 수 있습니다 - 매개 변수. 나는이 구현이 많은 경우에 최대한의 유연성을 제공 할 것이라고 생각한다.

+1

관련 항목 : http://stackoverflow.com/questions/6733667/is-there-an-alternative-to-bastard-injection-aka-poor-mans-injection-via-defau –

+0

감사! 그 게시물은 일을 정리했다! –

답변

1

이 접근법의 단점은 DefaultStrategy 클래스에 영구적으로 연결된다는 것입니다. 중요한 수화물을 가져다 주면 나중에 후회할 수 있습니다.

일종의 후기 바인딩을 사용할 수도 있습니다. 기본 전략이 없으므로 이름이 기본 전략 인입니다. 런타임에 처음 사용할 때 해당 클래스를로드하는 이름을 찾습니다. 이제 이름 클래스 매핑을 조정하여 전략을 제어 할 수있는 옵션이 있습니다.

이것은 JNDI의 JEE 리소스 룩업에 의해 활성화 된 한 가지 가능성입니다.

+1

좋은 생각. 사용자 정의가 제공되지 않은 경우 사용시 null 체크를 수행하고 기본 전략을 인스턴스화 할 수도 있다고 생각합니다. 일종의 게으른 초기화입니다. –

0

내가 고려해야 할 가장 중요한 점은이 구현이 가장 적합한 것일까 요? 저는 setter를 제공하는 것에 동의합니다 (이름을 setStrategy로 변경합니다). 그러나 한 가지 단점은 클라이언트가 어떤 전략을 사용할 수 있는지 정확히 알 필요가 있다는 것입니다. 클라이언트에 정보를 제공 할 수있는 한 가지 방법은 사용 가능한 각 전략을 보유하는 enum을 사용하는 것입니다. 그런 다음 클라이언트는 필요할 때이를 "핫 스왑"할 수 있습니다.

여기 내 샘플 코드는 www.jasonsjavadocs.com/XHTML/DesignPatterns.html의 "전략"섹션에서 볼 수 있습니다.