Как другие сказали, существуют шаблоны, конкретные из функционального программирования. Я думаю, что проблемой избавления от шаблонов разработки не является так вопрос переключения на функциональный, но вопрос функции языка .
Смотрят на то, как Scala покончил с "шаблоном"одиночка"": Вы просто объявляете объект вместо класса. Другая функция, сопоставление с образцом, помогает предотвращению неуклюжего из шаблона "посетитель". Посмотрите сравнение здесь: http://andymaleh.blogspot.com/2008/04/scalas-pattern-matching-visitor-pattern.html
И Scala, как F#, является сплавом функциональных OO. Я не знаю о F#, но он, вероятно, имеет этот вид функций.
Закрытия присутствуют на функциональном языке, но не должны быть ограничены ими. Они помогают с delegator шаблоном.
Еще одно наблюдение. Эта часть кода реализует шаблон: это - такой классик, и это является столь элементным, что мы обычно не думаем о нем как о "шаблоне", но это уверенный:
for(int i = 0; i < myList.size(); i++) { doWhatever(myList.get(i)); }
Императивные языки как Java и C# приняли то, что является по существу функциональной конструкцией для контакта с этим: "foreach".
Возможно, вам будет интересно прочитать этот вопрос и некоторые ответы на него по SO.
В основном он описывает, как компилятор C # создает экземпляры COM-объектов на основе интерфейсов. Это не обязательно та же ситуация, которую обсуждает Рихтер, но это интересный случай создания экземпляров интерфейсов.
Подумайте об этом в ситуациях, когда вы хотите рассматривать интерфейс как абстрактный класс. Хотя C # не поддерживает это.