SO (예 : Replacing if else statement with pattern)의 다양한 스레드를 기반으로 여러 if/else 문을 Command
패턴으로 바꿀 수 있다는 것을 알고 있습니다.If Else를 디자인 패턴으로 바꾸기
내 상황이 약간 다릅니다.
일련 번호가 Commands
이고 이전 명령이 성공적으로 수행되지 않은 경우에만 Command
을 실행해야합니다.
예를 들어 가상의 웹 페이지에서 텍스트를 검색해야한다고 가정합니다. 화면 스크래핑을 사용하여 페이지에서 텍스트를 직접 스크랩하거나 API에서 텍스트를 가져올 수 있습니다. 화면 긁기가 성공적이지 않은 경우에만 API에서 텍스트를 가져 오려고합니다. 즉 "긁히는"명령이 작동하지 않으면 "가져 오기"명령 만 실행합니다.
이 경우 스크래핑 된 문자열이 비어 있거나 null과 같은지 테스트 한 다음 두 번째 명령을 실행합니다. 두 번째 명령도 성공하지 못하면 세 번째 명령을 실행하는 등의 작업을 수행합니다.
특정 조건이 참/거짓 인 경우에만 후속 명령을 실행한다는 점이 중요합니다. 조건은 각 명령에 대해 항상 동일하지만 나중에 명령 수가 늘어날 수 있습니다.
I의 (aMap
및
Command
인터페이스를 사용하여) 일반적으로 제안 된 경로를 통해이를 구현할 수 없습니다 벡 첫 번째가 실패 할 경우이의 (a
Command
이 성공적인지 아닌지 또한 확인 할 수없는 것) 다음
Command
을 실행하지 않을
이 문제를 해결하기 위해 어떤 디자인 패턴을 사용할 수 있습니까?
을 (당신이
chain of responsibility
패턴이 더 적합하다고 생각하고 왜 그렇게 생각하지만 만약 코멘트를 배치하십시오) 내 문제에 대한 단순하고 간단 솔루션입니다 생각 : 실행 이 명령은 성공을 위해'true'를 리턴합니다. 모든 명령을 목록에 넣고 첫 번째 명령이 성공할 때까지 해당 명령의 모든 명령을 실행하십시오. 불행히도 Java Stream에는'takeWhile()'이 없습니다. – dhke당신은 [책임 패턴의 체인] (https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern)을 찾고 있다고 생각합니다. –