2011-08-18 2 views
2

나는 ChainHandler라는 추상 클래스와 ChainHandler의 많은 구현체를 가지고있다.Chain of Responsibility Logging

다른 프로그래머는 해당 ChainHandler의 다른 구현을 작성합니다.

내 프로그램은 Chain of Responsibility 디자인 패턴을 구현합니다.

ChainHandler의 각 구현은 핸들 메소드를 구현합니다.

하나의 핸들러가 "a"를 처리 할 수 ​​있으면 처리하고 체인을 중지합니다. 그렇지 않은 경우, "a"는 체인의 끝에 도달 할 때까지 다음 핸들러로 전달됩니다.

각각의 구체적인 처리기가 처리 할 수있는 모든 "a"의 목록을 갖기를 원합니다. 하지만 구체적인 클래스 개발자가 성공시 목록에 그것을 작성하는 것을 기억하도록하고 싶지는 않습니다.

우아한 방법이 있습니까?

내 최고의 아이디어였다 다음

1 - 그것은 부울을 반환하고 innerhandle하기 위해 이름을 변경하기 위해선, 구체적인 클래스에 보호에 대한 핸들 방법을 변경;

2 - 추상 클래스의 핸들 메소드를 public으로 변경하고 내부 핸들을 호출합니다. 성공하면 개체를 목록에 추가합니다.

+0

@ 트루 감사. :) – pablosaraiva

답변

2

이 두 번째 옵션은 분명히 더 나은 (그리고는 Template method pattern에 의존) 잘못하고의 서브 클래스를 구현하는 사람을 어렵게 만들고, 당신도 그렇게 아무도 변경할 수 없습니다 핸들 방법 최종을 만들 수 있습니다 그것을 알아 채지 않고 행동과 휴식을 취하십시오.

은 서블릿 API는 예를 가지고하는 ServletConfig를 매개 변수를 취하는 초기화 방법은 오버라이드 (override) 할 수 있으며, 그래서 사람들이 슈퍼 전화를 잊고 원래 초기화 (ServletConfig를) 방법을보고 오히려 일반적이다 이 같은 실수를 피하려고 노력해야합니다.

+0

템플릿 메서드 패턴에 대해 완전히 잊어 버렸고 정확히 원하는 것입니다. 고마워요! – pablosaraiva

관련 문제