Подтвердить что ты не робот

Какой шаблон дизайна GoF будет изменен или повлиять на введение lambdas в Java8?

Многие утверждают, что большая часть шаблонов дизайна GoF - это всего лишь обходные пути для отсутствия функций первого класса. Теперь, когда Java собирается получать лямбда-выражения, какой из этих шаблонов будет зависеть от них? Какие из них можно значительно упростить или обобщить? И какие из них в основном останутся прежними? Любой практический пример приветствуется.

4b9b3361

Ответ 1

Я думаю, что вы увидите большинство изменений в поведенческих моделях.

Метод шаблона. Методы шаблонов будут все чаще использоваться, и вместо этого мы увидим, что объекты передают функции в AbstractTemplate вместо подкласса AbstractTemplate. Я писал об этом в последнее время здесь: http://hamletdarcy.blogspot.ch/2007/11/groovy-closures-end-of-template-method.html

Шаблон наблюдателя. Наблюдатель упрощается, поскольку вам больше не нужно сохранять список наблюдателей, которые обновляются по новым событиям, но вместо этого сохраняют список функций, которые необходимо возвращать на новые события, Таким образом, нет интерфейса Observer и просто объектов функции.

Шаблон состояния/стратегии. Я группирую их вместе, потому что они структурно эквивалентны, просто разные по назначению. Использование стратегии становится гораздо более распространенным, поскольку его легче реализовать. Вам не нужны подклассы стратегии и стратегии для родителей, вам просто нужны функции. Поэтому просто просто передать функцию как параметр, который по сути использует шаблон стратегии.

В целом, я думаю, что любой шаблон, который требует интерфейса с одним методом, становится проще реализовать. Это будет иметь два эффекта. 1) Мы будем использовать эти функциональные шаблоны больше, и 2) мы перестанем ссылаться на них как на шаблоны, а также на "передачу функции".

Вы делаете то, что хотите, но я думаю, что "JavaScript Хорошие детали" дает довольно приятное введение в использование функций на языке. Вы можете забрать его и прочитать!

Ответ 2

Я попытался ответить на этот вопрос сам, написав серию статей, где я проанализировал некоторый шаблон GoF и их функциональный аналог с практическими примерами кода. В частности, я пересматривал: Команда и стратегия, Шаблон и наблюдатель, Decorator и Chain of Responsibility, Интерпретатор и посетитель.