2013-02-22 2 views
4

Chain of Responance 패턴의 개념을 이해하고 있지만 잘못 사용하고있는 것 같습니다.Chain of Responsibility 디자인 패턴 혼동

나는 여러 종류의 제품을 가지고 있으며 이러한 유형의 제품 각각에 대해 표시되는 인터페이스를 제어하는 ​​컨트롤러가 있습니다. 사용자는 제품 유형을 선택하고 각 컨트롤러는 해당 인터페이스를 표시하고 상호 작용할 책임이 있습니다.

이 점에 대해, 나는 괜찮다고 들리는 책임 패턴을 사용하고 있습니다. 내가하고있는 일은 일련의 컨트롤러를 만드는 것입니다. 제품 유형 요청을 받자 마자 컨트롤러의 체인에 전달하고 해당 컨트롤러가 요청을 구현하도록합니다.

그러나 단순한 공장을 사용하면서도 많은 조건문을 사용하여 동일한 결과를 얻을 수있었습니다.

이 상황에서 책임의 사슬을 어떻게 사용한다고 생각하십니까?

+1

가 작동하는 경우, 그것을 고정 주위에 가지 마세요. 커맨드 패턴이 같은 일을한다고 생각할 수 있습니다. –

+0

하지만 재발행 사슬이 그러한 문제에 대한 신청인지 여부에 대한 질문은? – Noor

+0

내가 대답을 게시하기 전에 내 질문은 이것입니다 : 제품 유형이 선택되면 다운 스트림 인터페이스 처리 및 탐색이 추가 변수를 조건으로 사용합니까 아니면 단순히 제품 유형의 기능입니까? – amphibient

답변

2

나에게있어이 일은 책임의 사슬에 대한 책임이 아닙니다.
일반적으로 책임 체인에서 체인 요소의 순서가 중요하며 여기서는 그렇지 않습니다.

나는 다음을 시도 할 것이다.
productType의 키와 컨트롤러의 값이있는 맵을 포함하는 일종의 레지스트리를 만듭니다.

샘플 구현 :

class ControllerRegistry 
{ 
    //declaration for map and constructor 

    public void Register(string productType, IProductController controller) 
    { 
    _map.Add(productType, controller); 
    } 

    public IProductController Find(string productType) 
    { 
    return _map[productType]; 
    } 
} 

그리고 응용 프로그램을 시작하는 동안 당신이 ControllerRegistry.Register 메소드를 호출하여 모든 당신이 컨트롤러를 등록해야합니다.
ControllerRegistry.Find 메서드를 호출하여 적절한 컨트롤러를 얻을 수 있습니다.
책임의 사슬과 비교할 때 제품 유형 수가 많으면 실적이 좋지 않을 것입니다.

편집
같은 작업 항목 Design pattern for handling multiple message types

+1

AKA 명령 패턴을 반환합니다. –