전략 패턴은 거대한 if ... else 구문을 피하고 기능을 쉽게 추가하거나 대체 할 수 있도록하는 데 효과적입니다. 그러나 여전히 내 의견으로는 하나의 결함이 남아 있습니다. 모든 구현에서 여전히 분기 구성이 필요한 것처럼 보입니다. 팩토리 또는 데이터 파일 일 수 있습니다. 예를 들어 주문 시스템을 사용하십시오.
공장:
// All of these classes implement OrderStrategy
switch (orderType) {
case NEW_ORDER: return new NewOrder();
case CANCELLATION: return new Cancellation();
case RETURN: return new Return();
}
이 이후의 코드는 걱정할 필요가 없으며 지금 새 주문 유형을 추가 할 곳은 단 하나 뿐이지 만이 코드 섹션은 여전히 확장 할 수 없습니다. 데이터 파일로 가져 가면 가독성이 다소 높아집니다 (논쟁의 여지가 있음).
<strategies>
<order type="NEW_ORDER">com.company.NewOrder</order>
<order type="CANCELLATION">com.company.Cancellation</order>
<order type="RETURN">com.company.Return</order>
</strategies>
그러나 이것은 여전히 상용구 코드를 추가하여 데이터 파일을 처리하고, 더 쉽게 테스트 할 수 있고 상대적으로 안정적인 코드를 부여하지만 그럼에도 불구하고 추가 복잡성을 가중시킵니다.
또한 이러한 종류의 구문은 통합 테스트를 잘 수행하지 못합니다. 각각의 개별 전략은 지금 테스트하기가 더 쉬울 수 있지만 추가하는 모든 새로운 전략은 테스트하기가 복잡합니다. 패턴을 사용 하지 않았다면 가질 수있는 것보다 적지 만 여전히 존재합니다.
이 복잡성을 완화시키는 전략 패턴을 구현할 수있는 방법이 있습니까? 아니면 이것이 얻는 것만 큼 간단합니까? 더 나아가려고하면 이익이 거의 없거나 전혀없는 다른 추상화 계층 만 추가 할 것입니까?
eval
Java로 작동하지 않지만 다른 언어로는 작동하지 않을 수 있습니다.