Skip to content

VlasovM/Design-patterns

Repository files navigation

Паттерны проектирования

Навигация:

Описание:

В данном репозитории будет описана часть паттернов, примеры кода и диаграммы к ним. В каждой директории есть свой ReadMe с диаграммой для каждого конкретного паттерна.

Все паттерны и примеры взяты из книиг Head First "Паттерны проектирования" O`Reilly

Паттерны проектирования:

Паттерн - решение задачи в контексте.

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

Принципы проектирования:

  • Выделите аспекты приложения, которые могут изменяться, и отделите их от тех, которые всегда остаются постоянными.
  • Программируйте на уровне интерфейсов, а не на уровне реализации.
  • Отдавайте предпочтение композиции перед наследованием.
  • Стремиться к слабой связанности взаимодействующих объектов.
  • Классы должны быть открыты для расширения, но закрыты для изменения.
  • Код должен зависеть от абстракций, а не от конкретных классов.
  • Принцип минимальной информатированности: общайтесь только с близкими друзьями.
  • Не вызывайте нас - мы вас сами вызовем.
  • Класс должен иметь только одну причину для изменений.

Классификация паттернов:

  • Порождающие - связаны с созданием экземпляров объектов, все они обеспечиваюи средства логической изоляции клиента от создаваемых объектов.
  • Структурные - объединяют классы или объекты в более крупные структуры.
  • Поведенческие - относятся к взаимодействиям и распределнию обязанностей между классами и объектами.

image

About

Demonstration main design patterns

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages