У меня есть класс RequestHandler и класс RequestListener. RequestHandler создает RequestListener и передает ему ссылку на себя. RequestListener, в свою очередь, вызывает методы RequestHandler для обработки запросов разных типов при их обработке (например, handleTypeARequest (), handleTypeBRequest () и т. Д.). К сожалению, RequestHandler также вызывает методы RequestListener (например, processNextRequest ()), поэтому у меня есть циклическая зависимость:
class RequestHandler {
RequestListener requestListener;
...
}
class RequestListener {
RequestHandler requestHandler;
...
}
Это означает более тесную связь между ними и, как правило, считается запахом кода.
Одним из решений было бы использование разных объектов для инкапсуляции каждого запроса вместо разных методов. RequestListener может, когда будет предложено, обработать запрос и вернуть для него некоторый тип объекта Request. К сожалению, мне не очень нравится этот подход, частично из-за дополнительной сложности большего количества объектов и классов и частично из-за проблем с производительностью (которые имеют значение здесь); Вызов методов handleXXXRequest () в RequestHandler напрямую намного быстрее, чем создание группы объектов и, возможно, также поддержка стека для их буферизации до тех пор, пока это не потребуется.
Существуют ли другие решения этой проблемы, а также, действительно ли это 1009 * проблема?