Я прихожу с Java, и я пересматриваю книгу Head First Design Patterns (которая является библией для шаблонов проектирования в соответствии с некоторыми разработчиками). Я пытаюсь воссоздать Duck Simulator из книги перевод Java на Obj-C, и это то, что я до сих пор:Шаблон проектирования стратегии в Objective-C
https://github.com/ZnelArts/IOSDesignPatterns/tree/master/DesignPatterns/Strategy/DuckSimulator
Этот симулятор использует шаблон стратегии, которая применяется с использованием протоколов. У меня есть 2 проблемы с моей реализацией:
1- У меня не может быть класса Duck абстрактным, как в версии Java, на версии Java метод «display()» является абстрактным и должен быть реализован детьми классы.
2- Я должен был открыть свойства класса Duck, чтобы классы детей имели к ним доступ, это не похоже на Java, где частные свойства могут быть видны дочерними классами.
Что было бы идеальным дизайном для этого решения?
Спасибо за ваши комментарии, поэтому [self doesNotRecognizeSelector: _cmd] - это просто защита для разработчиков, случайно вызывающих метод на родительском классе? – Hazneliel
Точно. Это не влияет на компилятор. Это просто справедливое предупреждение (во время выполнения), если разработчик забывает переопределить один из абстрактных методов в своей реализации подкласса. – Guven