Шаблон дизайна посетителя в Objective-C

Я искал лучший способ реализовать шаблон проектирования Visitor в Objective-C. Поскольку язык не поддерживает перегрузку методов, «традиционная» реализация, подобная той, которую можно найти в Java, кажется невозможной.

В моей текущей реализации у меня есть протокол посетителя, класс посетителя и несколько подклассов этого класса посетителя, а также различные объекты для посещения. Как только посещаемый объект принимает посетителя, они вызывают метод посещения посетителя, передавая себя в качестве аргумента. Метод посещения принимает идентификатор, затем приводит его к типу и вызывает

[self performTasksOnObjectClass: (ObjectClass *)object];

как часть блока if / elseif / else. Эти вызовы принимаются соответствующим подклассом Visitor, и Visitor выполняет все необходимые ему задачи с объектом.

Есть ли лучший способ реализовать шаблон Visitor, чем этот? Мне не нравится прибегать к вызовам isKindOfClass или isMemberOfClass внутри блоков if / elseif / else. Это просто кажется неуклюжим и неэлегантным. Кроме того, стоит ли по-прежнему реализовывать метод Visitor таким образом? Посещаемые объекты могут по-прежнему оставаться в неведении для Посетителя, но есть другие способы, которыми это может быть достигнуто.

Уже предполагалось, что делегирование или кластеры классов могут быть более подходящей альтернативой паттерну «Посетитель».Мне было бы интересно узнать, что вы все думаете!

Edit: у меня на самом деле были методы с разными именами, вызываемые в подклассе, я сделал это более понятным.

12
задан Dave Schweisguth 14 February 2016 в 00:01
поделиться