Может ли класс вызывать другую функцию в классе без того, чтобы первому классу нужно было знать, что это за класс

Так что, возможно, я неправильно сформулировал вопрос, поэтому я попытаюсь объяснить, что я имею в виду. Итак, у меня есть игровой сервер, который взаимодействует с Unity, написанным на java, и я блуждал, есть ли лучший способ обработки полученных данных потока TCP. Затем кто-то предложил мне использовать динамическую обработку пакетов, что является улучшением, но по-прежнему требует, чтобы у обработчика был определенный код дескриптора для каждого из различных типов пакетов.

Итак, я блуждал, возможно ли, чтобы полученные данные были объектом, в котором есть некоторый код, который имеет имя метода Say Handle packet, а затем обработчик не должен знать тип пакета / класса, который был получен, и пусть он просто вызовет метод пакета дескриптора. Любые советы высоко ценится.

Если на это был дан ответ до того, как я прошу прощения, я просто не знал, как это называлось, поэтому мой Google искал, где это не помогло.


person Matthew Hewitt    schedule 04.06.2015    source источник
comment
Ваше объяснение довольно плохое, и я не совсем уверен, правильно ли я понял вашу проблему. Если бы я это сделал, вы могли бы взглянуть на интерфейс.   -  person Turing85    schedule 04.06.2015
comment
что это за поток данных? кажется, что это не позиционирование в реальном времени (или вы бы использовали udp вместо tcp) - если каждый пакет вызывает операцию, вам может быть лучше обслуживаться с помощью API более высокого уровня stackoverflow.com/questions/7158530/unity3d-xml-rpc-and-c-sharp   -  person Lorenzo Boccaccia    schedule 04.06.2015
comment
Будьте осторожны с тем, как вы это делаете: Итак, я блуждал, возможно ли, чтобы полученные данные были объектом, в котором есть некоторый код, который имеет имя метода пакета Say Handle, а затем обработчик не должен знать тип пакета / класса, который был получен, и он просто вызывает метод пакета дескриптора. Ваш инстинкт побуждает вас сильно связать код, и вы можете прочитать множество ресурсов, которые помогут объяснить, почему это плохая идея. Достаточно сказать, что вы хотите передавать данные и иметь возможность позже изменить свое мнение о том, как вы с этим справитесь. Не указывайте имена методов и т. Д.   -  person joincamp    schedule 04.06.2015


Ответы (1)


Я бы использовал полиморфизм. Вам необходимо создать базовый тип с именем, скажем, Packet, а затем унаследовать другие типы пакетов от Packet. Класс Packet будет иметь метод Handle, так что все унаследованные классы тоже будут. Таким образом, вы можете вызывать handle для всех типов пакетов, и разные типы пакетов могут обрабатывать его по-разному. Дополнительную информацию о наследовании в java см. В этой статье от oracle.

person Joseph Hutchinson    schedule 04.06.2015
comment
Если Packet определяет только метод (который, скорее всего, будет abstract), вы можете сделать его интерфейсом. - person Turing85; 04.06.2015