Какой паттерн проектирования выбрать для списка объектов разного типа?
Есть три типа объектов:
1) Слот, который отображает информацию
2) Свободный слот
3) Заблокированный слот
Суть проблемы: как правильно создать коллекцию, которая будет хранить объекты всех трех типов и сохранить доступ к уникальным полям этих объектов без проверки на тип и приведения к этому типу? Пишу на C#. Пока в голове вертится только решение с проверкой на тип. Может быть, существует какой-то паттерн проектирования, который позволяет решить данную задачу?
Согласен с самокрутом - как вы сами хотите выбирать объект и выполнять его методы?
Если метод класса, перебирающий ваш список, проверяет объекты на типы и вызывает какие-то соответствующие действия, то вероятно есть проблема в архитектуре, т.к. вы переходите от ООП к процедурному программированию.
Я понимаю, что приведение типов вас не устраивает, но, На мой взгляд, здесь не применимы какие-либо паттерны. Ещё раз, Как сказал самокрут - как вы будете решать проблему выбора? У вас есть три объекта с разными методами. Ваш класс перебирает список, определяет тип объекта и вызывает соответствующий метод. Это немного не провославный ООП.
Вместо этого создаёте интерфейс (ну или класс) и используете наследование. Далее, в зависимости от задачи, можно применить, например, паттерн посетитель. Просто надо смотреть что вы хотите, без примера сложно понять.
Копайте в сторону правильной архитектуры.
Пересмотрел свое решение. Решил сделать просто наследование, плюс Property, которые будут возвращать коллекции конкретного типа для подписки/отписки от событий.
1. Наследование от одного класса
2. Реализация одного интерфейса.
3. Специальный класс-обертка, который умеет принимать на вход элементы вашего зоопарка и преобразовывать их в стандартный интерфейс к коллекции.
И я не очень понимаю, чем вам не нравится приведение типов для доступа к уникальным полям. Это абсолютно стандартная практика.