В данном репозитории будет описана часть паттернов, примеры кода и диаграммы к ним. В каждой директории есть свой ReadMe с диаграммой для каждого конкретного паттерна.
Все паттерны и примеры взяты из книиг Head First "Паттерны проектирования" O`Reilly
Паттерн - решение задачи в контексте.
- Стратегия - определяет семейство алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость. Он позволяет модифицировать алгортмы независимо от их использования на стороне клиента.
- Наблюдатель - реализует отношение один ко многим таким образом, что при изменении одного объекта происходит автоматическое оповезение и обновление зависимых объектов.
- Декоратор - динамически наделяет объект новыми возможностями и является гибкой альтернативой субклассированию в олбасти расширения функциональности.
- Фабричный метод - определяет интерфейс создания объекта, но позволяет субклассам выбрать класс создаваемого экземпляра. Таким образом, Фабричный Метод делегирует операцию создания экземпляра субклассам.
- Абстрактная Фабрика - предоставляет интерфейс создания семейств взаимосвязанных или взаимозависимых объектов без укзаания их конкретных классов.
- Одиночка - гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
- Команда - инкапсулирует запрос в виде объекта, делая возможной параметризацию клиентских объектов с другими запросами, организацию очереди или регистрацию запросов, а также поддержку отмены операции.
- Адаптер - преобразует интерфейс класса к другому интерфейсу, на который рассчитан клиент. Адаптер обеспечивает совместную работу классов, невозможную в обычных условиях из-за несовместимости интерфейсов.
- Фасад - предоставляет унифицированный интерйес к группе интерфейсов подсистемы. Фасад определяет высокоуровневый интерфейс, упрощающий роботу с подсистемой.
- Шаблонный метод - определяет "скелет" алгоритма в методе, оставляя определение реализации некоторых шагов субклассам. Субклассы могут переопределять некоторые части алгоритма без изменения его структуры.
- Итератор - предоставляет механизм последовательного перебора элементов коллекции без раскрытия её внутреннего представления.
- Состояние - управляет изменением поведения объекта при изменении его внутреннего состояния. Внешне это выглядит так, словно объект меняет свой класс.
- Выделите аспекты приложения, которые могут изменяться, и отделите их от тех, которые всегда остаются постоянными.
- Программируйте на уровне интерфейсов, а не на уровне реализации.
- Отдавайте предпочтение композиции перед наследованием.
- Стремиться к слабой связанности взаимодействующих объектов.
- Классы должны быть открыты для расширения, но закрыты для изменения.
- Код должен зависеть от абстракций, а не от конкретных классов.
- Принцип минимальной информатированности: общайтесь только с близкими друзьями.
- Не вызывайте нас - мы вас сами вызовем.
- Класс должен иметь только одну причину для изменений.
- Порождающие - связаны с созданием экземпляров объектов, все они обеспечиваюи средства логической изоляции клиента от создаваемых объектов.
- Структурные - объединяют классы или объекты в более крупные структуры.
- Поведенческие - относятся к взаимодействиям и распределнию обязанностей между классами и объектами.