모듈 A는 interface
을 정의하고 모듈 B가 인터페이스를 구현하는 콜백 객체를 전달하기 위해 호출 할 수있는 메서드를 제공하는 경우 모듈 B에 의존하지 않고 모듈 B를 호출 할 수 있습니다.
가정 해 내가는 foobar 라이브러리를 정의하고는 foobar 라이브러리의 상태 때문에 일부 외부 이벤트를 변경할 수 있다고 생각했습니다. 라이브러리 클라이언트가 상태 변경을 인식하기를 원한다면, 나는 콜백 메커니즘을 제공 할 수있다 :
interface StatusCallback {
void statusChange(Status status);
}
class Foobar {
...
void registerStatusCallback(StatusCallback statusCallback);
...
}
클라이언트 라이브러리로 제공
StatusCallback
을 implments 인스턴스를 생성하여 사용
:
Foobar foobar = ...;
statusCallback = new StatusCallback() {
void statusChange(Status status) {
...do something with changed status...
}
};
foobar.registerStatusCallback(statusCallback);
이제 외부 이벤트가 발생하고 상태가 변경 될 때마다 라이브러리는 클라이언트의 statusChange(status)
메소드를 호출합니다. 그러나 라이브러리 소스 코드는 클라이언트 코드에 의존하지 않습니다.
이것에 대해 자세히 설명해 주시겠습니까? 나는 많이 이해하지 못했습니다 .. – user5636236
@ user5636236, 위의 확장 대답을 참조하십시오. –