Что такое паттерны проектирования в C#

Паттерны проектирования — это проверенные решения распространённых проблем разработки программного обеспечения. В C# они помогают создавать гибкие, расширяемые и поддерживаемые приложения.

Категории паттернов проектирования

Паттерны проектирования делятся на три основные категории:

  1. Порождающие — управляют созданием объектов.
  2. Структурные — определяют способы построения связей между объектами.
  3. Поведенческие — управляют взаимодействием объектов и распределением обязанностей.

Порождающие паттерны

  • Фабричный метод (Factory Method) — позволяет создавать объекты без указания их конкретного класса.
  • Абстрактная фабрика (Abstract Factory) — предоставляет интерфейс для создания семейств взаимосвязанных объектов.
  • Одиночка (Singleton) — гарантирует существование только одного экземпляра класса.
  • Прототип (Prototype) — создаёт новые объекты путём клонирования существующих.
  • Строитель (Builder) — упрощает создание сложных объектов, разделяя процесс их построения и представления.

Структурные паттерны

  • Адаптер (Adapter) — позволяет объектам с несовместимыми интерфейсами работать вместе.
  • Мост (Bridge) — разделяет абстракцию и реализацию так, чтобы их можно было изменять независимо.
  • Компоновщик (Composite) — группирует объекты в древовидную структуру для работы с ними как с единым целым.
  • Декоратор (Decorator) — динамически добавляет новую функциональность объекту без изменения его структуры.
  • Фасад (Facade) — предоставляет унифицированный интерфейс к сложной системе классов.
  • Приспособленец (Flyweight) — оптимизирует использование памяти путём повторного использования общих данных.
  • Заместитель (Proxy) — управляет доступом к другому объекту, позволяя контролировать его создание и использование.

Поведенческие паттерны

  • Цепочка ответственности (Chain of Responsibility) — передаёт запрос по цепочке обработчиков, пока один из них не выполнит его.
  • Команда (Command) — инкапсулирует запрос в объект, позволяя параметризовать клиентов с разными запросами.
  • Интерпретатор (Interpreter) — определяет грамматику языка и интерпретирует выражения этого языка.
  • Итератор (Iterator) — предоставляет способ последовательного доступа к элементам коллекции без раскрытия её внутреннего устройства.
  • Посредник (Mediator) — определяет объект, инкапсулирующий способ взаимодействия множества объектов.
  • Хранитель (Memento) — сохраняет и восстанавливает прошлые состояния объекта без нарушения инкапсуляции.
  • Наблюдатель (Observer) — определяет зависимость «один ко многим» между объектами, чтобы при изменении состояния одного уведомлялись все зависимые.
  • Состояние (State) — позволяет объекту изменять своё поведение при изменении внутреннего состояния.
  • Стратегия (Strategy) — определяет семейство алгоритмов, инкапсулирует их и делает их взаимозаменяемыми.
  • Шаблонный метод (Template Method) — определяет основу алгоритма и позволяет подклассам изменять его шаги.
  • Посетитель (Visitor) — позволяет добавлять новые операции к объектам без изменения их классов.