대리자가없는 Java에서는 이벤트가 관찰자 패턴 다음에 인터페이스 콜백으로 모델링됩니다. 6 개 이상의 이벤트가있는 프레임 워크에서 작업하는 경우 대리인을 사용하는 것이 매우 장황하게됩니다.대리인을 통해 인터페이스 기반 콜백/이벤트가 사용됩니까?
자신의 C#을 잊어 버린 Java 개발자로서 이벤트 용 인터페이스를 사용하는 데 유효한 이유가 있는지 또는 정말 대리인을 사용해야하는지 여부가 궁금합니다.
대리자가없는 Java에서는 이벤트가 관찰자 패턴 다음에 인터페이스 콜백으로 모델링됩니다. 6 개 이상의 이벤트가있는 프레임 워크에서 작업하는 경우 대리인을 사용하는 것이 매우 장황하게됩니다.대리인을 통해 인터페이스 기반 콜백/이벤트가 사용됩니까?
자신의 C#을 잊어 버린 Java 개발자로서 이벤트 용 인터페이스를 사용하는 데 유효한 이유가 있는지 또는 정말 대리인을 사용해야하는지 여부가 궁금합니다.
항상 여러 콜백에 반응하는 것이 좋은 경우 인터페이스를 사용하는 것이 좋습니다. 그러나 콜백의 일부 (원하는 인터페이스 만)에 대한 대리자를 제공하여 인터페이스를 구현할 수 있도록 일부 어댑터 메소드를 작성할 수 있습니다. Reactive Extensions 작품 ... 거의 아무도 이제까지 정말이 IObserver<T>
를 구현하지 어떻게
이입니다 - 그들은 호출자가 대표를 통해 OnNext
, OnCompleted
및 OnError
핸들러를 지정할 수 있습니다 IObservable<T>.Subscribe
확장 방법을 사용합니다.
위와 같은 방법으로 델리게이트 (일반적으로 인터페이스보다 람다 식으로 지정하기가 더 쉽습니다.)뿐만 아니라 모든 관련 콜백을 전달할 수있는 일관된 객체를 얻을 수 있습니다.
참석자는 훨씬 유연합니다. C#에는 익명의 클래스가 없으므로 (Java의 의미에서) 인라인 인터페이스를 쉽게 구현할 수 없습니다. 따라서 API에서 인터페이스를 구현해야 할 때마다 람다와 대조적으로 클래스를 작성해야합니다.이 클래스는 서로 물리적으로 멀리 떨어져 논리를 분리해야하기 때문에 가독성이 떨어집니다.
흥미 롭습니다. 그러나 아직 이해할 수있는 조금 이론적입니다. 그렇다면 다음 콜백 정의가 아닌 델리게이트를 사용하는 접근 방법은 무엇입니까? public interface IPluginEvents { void OnLoad (IPlugin plugin); void OnShow (IPlugin plugin); bool CanUnload (IPlugin plugin); void OnUnload (IPlugin plugin); } –
글쎄, 한 가지 옵션은 생성자에서 대리자를 가져온 인터페이스를 구현하는 클래스를 갖거나 ... 유창한 인터페이스 인 WithLoadHandler (...). WithShowHandler (...) 추가 처리기로 클래스의 새 인스턴스를 작성했습니다. 확실하지 않다. 지옥, 심지어 그냥 정상적인 이벤트를 사용할 수 있으며, 이벤트 처리기를 호출하여 인터페이스를 구현합니다. –