Closed sohhhyeeun closed 1 year ago
네 이해하신게 맞습니다.
setSuccessor와 handle은
abstract class ProcessingObject<T> {
protected ProcessingObject<T> successor;
public void setSuccessor(ProcessingObject<T> successor) {
this.successor = successor;
}
public T handle(T input) {
T output = handleWork(input);
if (successor != null) return successor.handle(output);
return output;
}
abstract protected T handleWork(T input);
}
이렇게 구현되어 있는데, successor가 null이 아니면, success의 handle 메서드를 호출하게 됩니다.
실제 작업은 abstract handleWork를 구현한 클래스가 처리합니다.
p1의 successor의 handle을 먼저 처리하고, p2의 successor의 handle메서드를 처리합니다.
의무 체인 패턴은 책임 연쇄 패턴 이라고 검색하면 더 많은 정보가 나오는 거 같습니다.(사실 번역의 차이)
어떤 사람에게 요구 사항이 온다고 하였을 때, 그 사람이 바로 처리할 수 있으면 처리한다. 처리할 수 없다면 ‘다음 사람’에게 전달한다. 이후 계속적으로 반복하는 것입니다.
“요구를 내는 사람(Main에서의 객체 p1, p2 등)“과 “요구를 처리하는 사람(ProcessingObject)“을 완만하게 연결시키는 것이 이 패턴의 핵심이라고 합니다. 예제에서는 p1.setSuccessor(p2); // 두 작업 처리 객체 연결
이 부분인거구요
또, 책에서는 이를 람다표현식으로 UnaryOperator와 andThen메서드로 조합하는 예시를 보여주었습니다.
에서 두 작업 처리 객체를 연결은 "Aren't labdas really sexy?!!"의 text가 p1에 우선적으로 들어가 "From Raoul, Mario and Alan: "와 합쳐지고 이 때의 return 값이 새로운 text로 p2에서 맞춤법 검사가 이루어지는 것을 의미한다고 이해하면 될까요?