Я работаю над парсером для протокола последовательных данных. У меня есть всеобъемлющий класс Packet
, пара подклассов, таких как CommandPacket
и StatusPacket
, а затем несколько подклассов каждого из них:
Класс Packet
имеет статический метод для извлечения данных из буфера, и, если он представляет действительный пакет, возвращает новый экземпляр класса Packet
, созданный с необходимыми данными.
Теперь вот моя проблема. Я хотел бы иметь возможность вернуть самый специфический тип пакета. Чтобы облегчить это, я создал статический метод .isValid()
, который переопределяется на подклассах. Идея состоит в том, что я мог бы перебирать каждый тип определенного пакета (CommandTypeA
, CommandTypeB
, StatusTypeA
, StatusTypeB
и т. Д.), Вызывая .isValid()
, пока один из них не вернет TRUE
. В этот момент я бы вернул новый экземпляр этого конкретного типа пакета.
Хотя, конечно, я могу создать этот метод напрямую, как мне учесть типы пакетов, которые еще не добавлены в мой проект? Я хочу, чтобы в будущем кто-то смог продлить мой класс без необходимости изменять исходный класс Packet
.
Я подумал об использовании отражения для этого, но избегаю его, поскольку эти методы будут вызываться для каждого полученного пакета и должны быть эффективными.
Есть мысли о том, как мне переделать мой шаблон проектирования?
Хотя я не думаю, что это полностью соответствует обсуждению, я делаю это в VB.NET. Здесь также есть похожий (но не совсем тот же) вопрос: Java - шаблон проектирования валидации подкласса