Забудьте о шаблонах дизайна. Если есть шаблон проектирования, то это «шаблон проектирования делегата».
UITableView может отображать данные различными способами. И данные могут поступать из миллиарда разных мест. UITableView не может справиться со всем этим.
Именно поэтому приложение предоставляет один делегат объект, который предоставляет данные для UITableView. Делегат должен иметь возможность сообщить UITableView, сколько разделов в таблице, сколько строк в каждом разделе, данные для каждой строки, верхний и нижний колонтитулы для каждого раздела. Обладая этими знаниями, UITableView может выполнять свою работу. Без этого делегата вам пришлось бы создавать множество подклассов UITableView, что является проблемой.
Но нет класса UITableViewDelegate, потому что тогда вам придется создать множество подклассов UITableViewDelegate, и у вас будет точно такая же проблема, как миллиарды подклассов. Вместо этого есть протокол . Протокол определяет, какие методы делегат должен поддерживать, а затем вы добавляете эти методы делегата в некоторый класс, который все равно понимает данные.
Итак, как работает шаблон делегата: вы создаете класс, который выполняет эту тяжелую работу. Но для того, чтобы класс мог адаптироваться к различным ситуациям, вы предоставляете ему объект делегата, который реализует различия между различными ситуациями. Объект делегата обычно является экземпляром полностью несвязанного класса, к которому были добавлены методы делегата.