Честно сказать, изучая и сравнивая паттерны, в моей голове сложилось мнение, что мое или чье-либо другое трактование данных паттернов, может отличаться от оригинала, и наверное это нормально, потому что связано с возможной недосказанностью, плохими примерами или преподавательскими способностями авторов, а иногда видишь, как паттерн "притягивают за уши" к ситуации, но все же, в некоторых трактованиях многие авторы сходятся. В свою очередь, я постараюсь дать определение паттернам, основываясь на их названиях и своих знаниях.
| Именование | Описание |
| Фабрика | Не паттерн, а общая концепция, часто под этим словом подразумевают Простую фабрику |
| Простая фабрика | Класс, в котором есть всего одна функция, которая создает различные объекты в зависимости от переданных в нее аргументов |
| Абстрактная фабрика | Интерфейс или абстрактный класс, с функциями, которые нужно реализовать, чтобы создавать объекты одной группы. Например нам нужна фабрика создания мебели, которая умеет создавать: шкаф, диван, кресло. Все бы ничего, но людям нужны разные стили мебели: классический, современный, футуристичный. Поэтому, логично создать 3 фабрики, каждая фабрика будет уметь делать ровно три предмета (шкаф, диван, кресло), но каждая в своем стиле (классический, современный, футуристичный). |
| Фабричный метод | Реализованная функция интерфейса или абстрактного класса, вызов которой создает объект |
| Создающий метод | Функция класса, которая создает объект класса, в котором находится |
| Статический фабричный метод | Статичная функция класса, которая создает объект класса, в котором находится |
| Одиночка | Функция класса, которая создает объект класса, в котором находится. Но, если вызвать данную функцию повторно, то она возвратит объект, который был создан при первом вызове функции. |
| Строитель |
Пример из жизни: строительная бригада, которая умеет строить Дом с Садом, или Дом с бассейном, или Дом с гаражом и бассейном Класс, последовательный вызов функций которого, создают объект только одного вида, но часто с разным содержимым: смотри пример из жизни. Хорошей реализацией считается, когда в классе-строителе есть функция финализации (finalize), вызов которой, помечает данный объект свойством законченности, т.е. объект становится более неизменяемым. |
| Прототип |
Пример из жизни: процесс деления клеток Пример в программировании: функция, которая умеет создавать копию объекта в котором она находится или копию переданного в нее объекта |
Определяют структуру в проекте, могут изменять интерфейс уже существующих подсистем, позволяя облегчить разработку и оптимизировать программу.
Также известен как: Обёртка, Decorator

Декоратор - человек, который принимает заказы только на оформление чего-либо, например: театр, магазин, картина.
Класс, расширяющий функциональность другого класса c использованием наследования.
Также известен как: Facade

Завод по изготовлению какой-либо продукции имеет офис, в котором находится персонал принимающий заявки от клиентов и отдающий распоряжения на изготовление продукции.
Функция, содержащая в себе вызовы других функций или класс, расширяющий функциональность другого класса без использования наследования.
Часто целью данного паттерна является соблюдение закона Деметры.
Фасад не создает новые объекты.
Также известен как: Gateway

Любой компьютер при подключении к интернету, должен себя идентифицировать у интернет-провайдера, обычно, компьютер показывает Вам форму ввода логина/пароля (форма в этом случае является реализацией паттерна Фасад), которые после ввода отправляется на шлюз интернет-провайдера.
Фасад vs Шлюз
Фасад реализуется стороной которая обращается куда-либо, а Шлюз реализуется стороной к которой обращаются.
Также известен как: Дерево, Composite

Компоновщик (от лат. componere «складывать») - человек, который может сложить предметы в коробку, и предоставить информацию о том, сколько в коробке предметов, какова их общая стоимость, и т.п. обобщенную информацию. Так же, компоновщики часто собирают что-то большое из чего-то маленького, например автомобиль из деталей, деталь автомобиля из более мелких деталей.
Функция, которая создает основной объект и наполняет его второстепенными объектами, при этом основной и второстепенные объекты должны быть одного типа (имплементируя единый интерфейс).
Также известен как: Adapter / Wrapper

Переходник с одного типа розетки на другой тип розетки, и есть Адаптер.
Объект реализующий интерфейсы двух других объектов, которым нужно взаимодействие друг с другом.
Также известен как: Bridge

Есть 2 города разделяемые рекой, для взаимодействия между ними строят мост, города развиваются каждый по-своему, но мост не меняется, городам приходится учитывать строение моста (города подстраиваются под мост, а не мост под города).
Чаще всего, мост - это класс с интерфейсом, который должны реализовать оба объекта (которым нужно взаимодействие между собой)
Паттерн Мост очень похож на Адаптер, но Адаптер адаптируется под обе стороны, а Мост говорит, чтобы обе стороны подстраивались под него
Альтернативные названия: Flyweight

Человеку приходится адаптироваться к погодным условиям, например зимой одевать теплые вещи.
Класс реализующий существующий интерфейс, для взаимодействия.
В современном мире, очень часто данный паттерн связывают с разделяемой памятью, но исторически было не так однозначно.
Приспособленец это конечная вещь, а Адаптер, это промежуточная вещь
Также известен как: Proxy

Заместитель руководителя имеет те же полномочия что и руководитель (в момент отсутствия руководителя).
Объект, который перехватывает вызовы к оригинальному объекту.
Определяют взаимодействие между подсистемами проекта, с целью улучшения гибкости разработки.
Также известен как: CoR, Chain of Command, Chain of Responsibility

Вы купили новый компьютер, но он не включается - Вы звоните в компанию-производитель, и начинается цепочка получения ответа:
Цепочка образуется из звеньев цепи - объектов, и имеет следующие особенности:
Также известен как: Command

Генерал отдает Полковнику команду "наступление на противника", каждый из Полковников отдает свою команду, например "наступление по левому флангу". Следовательно, Генералу важно, чтобы каждый Полковник правильно понял команду, Полковнику важно, чтобы каждый Рядовой правильно понял команду. Чтобы все правильно понимали команду, нужно всех обучить всем известным командам.
Важно: паттерн подразумевает простую возможность достижения чего-то более сложного
Объект X реализованный по интерфейсу Command, о котором знает объект A, чтобы объект A мог обращаться к объекту X по заранее согласованным функциям интерфейса.
Паттерн "Фасад" не обязывает реализовывать какой-либо интерфейс, а паттерн "Команда" - обязывает (Генерал знает команду, благодаря которой Полковник сделает все правильно).
Также известен как: Iterator

Путешественник, который рисует на карте точки и стрелки, которыми любой желающий может воспользоваться, чтобы пройти незабываемое путешествие.
Идея паттерна Итератор состоит в том, чтобы вынести поведение обхода коллекции из самой коллекции в отдельный класс. Отсюда, имеет 2 вида итераторов:
Также известен как: Strategy

Вам нужно добраться до аэропорта. Можно доехать на автобусе, такси или велосипеде. Здесь вид транспорта является стратегией. Вы выбираете конкретную стратегию в зависимости от контекста — наличия денег или времени до отлёта.
Класс Context имеет функцию поиска, которая пробегается по известным ей классам (эти классы обязаны имплементировать интерфейс Strategy требующей создать функцию, которую будет вызывать класс Context).
Также известен как: Intermediary, Controller, Mediator

Пилоты самолётов не общаются напрямую с другими пилотами. Вместо этого они связываются с диспетчером, который координирует действия самолётов.
Функция обеспечивает взаимодействие с др. функциями, сформировав при этом слабую связанность и избавив от необходимости явно ссылаться друг на друга.
Фасад оговаривает вопрос структуры (кто кому подчиняется) а Посредник реализует эту структуру.
Также известен как: Memento, Снимок
На мой взгляд, это один из самых запутанных паттернов, потому что всюду его пытаются описать слишком заумно.

Паттерн считается реализованным, если в функционале появляется возможность восстанавливать состояние некого объекта (назовем его Originator), и достигнуто это с помощью трех классов:
Простой пример
OriginatorObject = new Originator('{"value":"1"}') // создаем объект из переданного json
Caretake.set(OriginatorObject) // функция set преобразует OriginatorObject в json и сохранит его в себе
OriginatorObject.value = '{"value":"2"}' // изменяем состояние объекта OriginatorObject
OriginatorObject = Caretake.get() // восстановление OriginatorObject с помощью внутреннего вызова new Originator('{"value":"1"}')
Внимание, в примере нет объекта «Memento/Хранитель», потому что «Memento/Хранитель» это внутренний класс, который используется объектом Caretake, чтобы сохранить состояние объекта/значения Originator. Практически, вместо «Memento/Хранитель» может быть простая сериализация значения в json / из json.
Также известен как: Издатель-Подписчик, Слушатель, Observer
Для реализации паттерна Вам понадобится:
Подписчик vs Слушатель
Виды уведомлений
Почтовое отделение и человек.
Нюанс
Иногда, Event (Событие) и Subject (Издатель) объединяют, пример из жизни: знаменитость может уведомить лично своих фанатов.

Observer {
abstract public update ( SplSubject subject ) : void // этот метод будет вызван, когда в объекте Subject произойдет изменение состояния
}
Subject {
abstract public attach ( SplObserver observer ) : void
abstract public detach ( SplObserver observer ) : void
abstract public notify ( void ) : void // объект Subject при изменении своего состояния, должен вызывать метод update(this) каждого Observer-а
}
Источник: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9