Шаблоны проектирования и шаблоны программирования - это описания лучших вариантов решений для типовых задач. Многие тыщи программистов уже решали такие типовые задачи и у большинства получалось добиться хорошего результата приблизительно одинаковым способом.
Под задачей иногда подразумевается глобальные:
как сделать так, чтобы второй программист понял мой код (например, MVC/MVVM - разделение кода на логику и представление, шаблонизация Twig/Jade, фреймворки)
как сделать так, чтобы мы кодили быстро (фреймворки, деление кода на фронт/бак, шаблонизация Twig/Jade, доступ к данным через ORM/ADO, препроцессоры LESS/SCSS/Stylus)
как сделать так, чтобы мы к себе смогли легко включить сторонний модуль или наш код могли подключить к чему-нибудь (плагины, модули)
Средне-масштабные
как сделать так, чтобы по возможности было меньше обращений на сервер (кэш, lazy init, client-side validation, rich internet application)
как обрабатывать долгие запросы (очередь, асинхронная обработка, comet, websocket, long polling)
что делать, если интерфейс "замёрз" (показать spinner, вывести "сожалелку :(")
как сделать мега-форму из 50 полей (сделать пошагового мастера)
как показать что-то очень важное (popup, модальное окно)
Мелкие
как сделать так, чтобы интерфейс реагировал на поведение пользователя (события)
как сделать так, чтобы код выполнялся периодически (таймеры, интервалы)
как сделать так, чтобы у меня скрипты JS подключались по мере необходимости и только один раз (requirejs)
как сделать так, чтобы у меня одинаковая задача запускалась только если предыдущая уже закончилась (например, не посылать запрос AJAX, если предыдущий не отработал; не анимировать два раза один и тот же объект DOM)
Вообще невозможно сказать, что каждая из них решается комбинацией синглотонов. Или фабрик. Там куча-мала, просто завал мелких фрагментиков кода, блоков логики, в каждом из которых что-то было сделано по шаблону.
Вот тут на примерах на Javascript с объяснением
habrahabr.ru/post/132472