Если всегда имеет смысл реагировать на множественные обратные вызовы, то имеет смысл использовать интерфейс.Однако вы можете захотеть написать некоторые методы адаптера, чтобы позволить интерфейсу быть реализованным, предоставляя делегаты для некоторых из обратных вызовов - только те, которые вы хотите.
Так работает Reactive Extensions ... почти никто никогда действительно не реализует IObserver<T>
- они используют метод расширения IObservable<T>.Subscribe
, который позволяет вызывающей стороне указывать OnNext
, OnCompleted
и OnError
обработчики через делегаты.
Таким образом, вы получаете преимущества делегатов (которые обычно проще определить, чем интерфейсы, благодаря лямбда-выражениям и т. Д.), А также один согласованный объект для передачи, который представляет все связанные обратные вызовы.