Это то, что сказал Javadoc ChannelDuplexHandler:
Реализация ChannelHandler, представляющая комбинацию из ChannelInboundHandler и ChannelOutboundHandler.
и определение класса, как показано ниже:
public class ChannelDuplexHandler extends ChannelInboundHandlerAdapter implements ChannelOutboundHandler
ChannelDuplexHandler
расширяет ChannelInboundHandlerAdapter
для использования всех своих шаблонных методов , в то время как Java не поддерживает множественное наследование, поэтому (может быть, компромиссным способом?) ChannelDuplexHandler
внедряет ChannelOutboundHandler
и переопределяет все методы, которые точно совпадают с ChannelOutboundHandlerAdapter
реализацией.
Является ли эта избыточная работа хрупкой? Как-нибудь однажды решив изменить поведение шаблона ChannelOutboundHandler
, я должен изменить зеркалирование реализации ChannelDuplexHandler
?
Итак, мои вопросы:
- Почему расширяется
ChannelInboundHandlerAdapter
а не ChannelOutboundHandlerAdapter
? только потому, что ChannelOutboundHandler
имеет меньше методов для переопределения? - Почему бы не использовать некоторые умные способы, чтобы избежать этого? (шаблоны агентства или деформации? Я не знаю, правильно ли я понимаю концепцию)
- Если
ChannelOutboundHandler
добавить какой-то новый метод интерфейса, у вас нет выбора, кроме как написать один и тот же код дважды в ChannelOutboundHandlerAdapter
а ChannelDuplexHandler
? (или где-то еще, может быть)