Последние 8 лет я ходил туда-сюда между C # и Java.
Одна вещь, которая поражает меня, это то, что я полностью прекратил использовать шаблонный шаблонный метод в C #. На самом деле, в C # я начал думать об этом паттерне как о анти-паттерне.
http://en.wikipedia.org/wiki/Template_method_pattern
Возвращаясь к Java, я обнаружил, что паттерн живой и здоровый. Я все еще думаю, что это выглядит антично, но понимаю, что нет другого способа сделать это в Java. Ява тоже выглядит антично;)
Поскольку это все равно произойдет, почему это антипаттерн?
- Часто он использует вашу иерархию наследования по «неправильным причинам».
- Базовые классы имеют тенденцию становиться заваленными всевозможными не связанными кодами.
- Это вынуждает вас блокировать дизайн, часто довольно рано в процессе разработки. (Преждевременная блокировка во многих случаях)
- Изменение этого на более поздней стадии становится все сложнее и сложнее.
То есть с замыканиями / делегатами / указателями на функции вы обычно передаете некоторую функцию вместо подклассов.
Итак, вернемся к вопросу:
Если ваш язык имеет замыкания / делегаты / функции, используете ли вы метод шаблона и когда?