У меня есть модель данных, которая включает в себя большой список (массив) разнородных элементов. Существует всего 2-3 разных вида предметов, каждый из которых наследуется от базового класса. Используя классические примеры, скажем, базовый класс - Vehicle
, а подклассы - Car
, Train
и Plane
.
У меня есть более крупная модель / контроллер-владелец, который хочет работать с этим упорядоченным списком транспортных средств, и хотя некоторые операции являются общими (и относятся к базовому классу и переопределяются в подклассах), многие из этих операций относятся только к только один из видов предметов.
Итак, я получаю много кода, который выглядит следующим образом:
for (Vehicle * vehicle in vehicles) {
if (![vehicle isKindOfClass:[Car class]]) {
continue;
}
Car * car = (Car *)vehicle;
// Do stuff only with "car".
}
Так что у меня есть много -isKindOfClass:
везде и много приведения базового класса к подклассу. Конечно, все это работает, но кажется, что «запаха кода» достаточно, чтобы заставить меня подумать, что может быть более элегантный способ либо написания этого кода, либо разработки моей объектной модели.
Мысли? Спасибо.