Я искал лучший способ реализовать шаблон дизайна Visitor в Objective-C. Поскольку язык не поддерживает перегрузку метода, "традиционная" реализация, такая как, например, на Java, кажется невозможной.
В моей текущей реализации у меня есть протокол Visitor, класс Visitor и несколько подклассов этого класса Visitor, а также различные объекты для посещения. Когда посетивший объект принимает посетителя, он вызывает метод посещения посетителя, передавая себя в качестве аргумента. Метод посещения принимает идентификатор, затем вводит его тип и вызывает
[self performTasksOnObjectClass: (ObjectClass *)object];
как часть блока if/elseif/else. Эти вызовы выбираются соответствующим подклассом Visitor, и посетитель выполняет любые задачи, которые ему необходимы для объекта.
Есть ли лучший способ реализации шаблона посетителя, чем это? Мне не нравится прибегать к вызовам isKindOfClass или isMemberOfClass внутри if/elseif/else блоков. Это просто кажется неуклюжим и нелепым. Кроме того, все-таки "стоит" реализовать метод "Посетитель" таким образом? Посещенные объекты все еще могут оставаться не знакомыми с посетителем, но есть и другие способы, которыми это может быть достигнуто.
Уже было высказано предположение, что либо делегирование, либо кластер классов могут быть более подходящими альтернативами шаблону посетителя. Мне было бы интересно посмотреть, что вы все думаете!
Изменить: у меня на самом деле были разные методы, называемые в подклассе, я сделал это более ясным.