Я пишу программу на Python, которая будет использовать Twisted для подключения к TCP-серверу. На сервере на другом конце сокета может быть запущен один из двух возможных протоколов (protoA или protoB), но я не буду знать, какой это, пока я не установил соединение и не «спросил» сервер, какой протокол используется. используемый. Я могу определить, какая версия протокола (protoA или protoB) используется после подключения, но заранее не знаю.
Очевидно, что одно решение состоит в том, чтобы в моем классе, извлеченном из протокола, было много специального кода - то есть, если protoA сделал это, elif protoB сделал бы что-то еще. Однако я хотел бы иметь возможность хранить код для двух отдельных протоколов в двух отдельных реализациях протокола (хотя они могут совместно использовать некоторые функции через базовый класс). Поскольку обе версии протокола предусматривают сохранение состояния, может возникнуть путаница, когда нужно смешать обе версии в одном классе.
Как я могу это сделать? Есть ли способ выполнить начальный шаг «идентификации протокола» в реализации Factory, а затем создать правильную производную протокола?