Я новичок в шаблонах дизайна, и вот мой вопрос
если у нас есть абстрактный класс с несколькими классами, которые его реализуют, и каждый из этих классов имеет разные атрибуты.
теперь у меня есть другой (класс Manager), который содержит массив абстрактного класса, и я хочу добавить в него метод поиска ... как я могу это сделать, не приводя к конкретным классам?
У меня есть 2 идеи:
Первый : добавление дополнительных уровней интерфейсов (т. Е. Вместо приведения к конкретному классу я буду приводить к интерфейсу), что сопровождается кодом для интерфейса, а не правилом реализации ...
но таким образом, когда я добавляю другой класс, мне нужно будет создать для него интерфейс, а также мне придется редактировать менеджера (клиента), что не очень хорошо.
Второе решение:
это выглядит несколько странно и все еще нуждается в улучшениях, но его главная цель - заставить менеджера или любого другого клиента работать с абстрактным классом, не зная, кто его расширяет или его атрибуты.
солютин таков:
каждый добавленный новый элемент должен будет переопределять один интерфейс, который заставляет его генерировать полное описание его полей, например, объект автомобиля должен будет возвращать
хеш-карта, имеющая следующий
field: {fieldType, fieldValue}
пример
- модель: {текст, "ford"}
- manifactureDate: {Дата, "12/1/89"}
и каждый объект должен будет также реализовать метод под названием CompareFields, который принимает
Вот такую хэш-карту, сравните ее с ее полем и верните true или false.
теперь, таким образом, я решил много проблем
-для графического интерфейса мне нужно будет только сделать движок рендеринга для этого хэш-карты, который может отображать
любой предмет, не зная, какой у него тип. (опять же, GUI - это другой клиент для абстрактного класса)
-для поиска я могу получить хеш-карту, содержащую поля, которые вводит пользователь
в форме поиска и зациклите на абстрактных элементах и вызовите метод сравнения
Я до сих пор не понимаю, как я буду обрабатывать сложный объект (у которого есть другой объект в качестве его атрибутов)
Я не знаю, что это за шаблон ... это просто идея, о которой я думал.
РЕДАКТИРОВАТЬ: БЕТОННЫЙ ПРИМЕР
если у меня есть абстрактный класс Class с машиной, автобусом и лодкой, который его реализует, и каждый из этих классов имеет разные атрибуты ....
как менеджер, например, менеджер трафика может найти определенный элемент, используя абстрактный класс, не передавая его в машину или автобус ...
очень жаль за длинный вопрос