2013-05-16 4 views
-2

이것은 더 윤리적 인 질문과 같을 것이다. 그러나 나는 그것에 대해 꽤 궁금하다.전략 패턴 : 인스턴스 또는 Object.class?

따라서 Strategy Pattern이 있습니다. 전략 패턴은 Strategy-Interface를 인수로 취하는 여러 구현과 여러 가지 메소드가있는 전략 인터페이스가있는 곳입니다.

  • Interface: SearchStrategy
  • Class: StringSearch implements SearchStrategy
  • Class: IntSearch implements SearchStrategy
  • etc.

그런

등의 방법이있다 :

의이 예로서 다음을 가정 해 봅시다

doSearch(String a, String b, SearchStrategy strategy)

전략 개체는 어떻게 처리합니까? 인스턴스 또는 클래스를 전달 하시겠습니까?

A : doSearch("Hello","World", new StringSearch());

또는

B

: doSearch("Hello","World", StringSearch.class);

그래서, 인스턴스를 생성하고 그것을 통해 통과, 또는 클래스 객체를 통해 전달하고 방법은 인스턴스를 만들 수 있습니다. 더 나은, 깨끗한 방법은 무엇입니까?

어때요? 물론 강력한 서버에서는 성능에 큰 차이가 없지만 리소스가 적고 프로세서가 느린 임베디드 시스템은 어떻습니까?

+0

Java로 생각하면 StringSearch와 IntSearch가 같은 인터페이스를 구현하고'doSearch'가 상호 교환 가능하게 호출 할 수있는 방법을 모릅니다. –

+0

내보기가 좋지 않을 수도 있지만 아직 그 예일뿐입니다. 두 번째 언뜻 보면 IntSearch는 전혀 필요 없습니다.) – Korashen

답변

1

인스턴스입니다. 클래스를 전달하면 doSearch() 메서드가 리플렉션을 사용하여 Strategy 개체를 인스턴스화합니다. 모든 클래스가 기본 생성자를 갖는 것과 같은 일부 규칙에 동의하는 경우에만 작동합니다.

그리고 어떤 상태 (caseSensitive 플래그 또는 다른 문맥 객체에 대한 참조 또는 기타와 같은)를 가진 전략을 전달하는 것을 허용하지 않습니다.

성능과 관련이없는 것으로 나타났습니다.

0

인스턴스를 전달하십시오. 매개 변수 (예 : 데이터베이스 연결, 말하기)로 미리 인스턴스화 된 인스턴스를 전달하려는 경우 클래스 자체를 전달하여이를 수행 할 수 없습니다.

코드가 새 인스턴스를 만든 다음 (코드를 팩토리를 전달하려는 경우) 또는 일부 리플렉션 유형의 메커니즘을 원할 경우 클래스가 전달되기를 기대하지만 그러한 시나리오는 거의없고 멀리 있습니다. 중에서.