Паттерны проектирования — это проверенные решения распространённых проблем разработки программного обеспечения. В C# они помогают создавать гибкие, расширяемые и поддерживаемые приложения.
Категории паттернов проектирования
Паттерны проектирования делятся на три основные категории:
- Порождающие — управляют созданием объектов.
- Структурные — определяют способы построения связей между объектами.
- Поведенческие — управляют взаимодействием объектов и распределением обязанностей.
Порождающие паттерны
- Фабричный метод (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) — позволяет добавлять новые операции к объектам без изменения их классов.