В своей работе я регулярно использую следующие паттерны проектирования:
-
Порождающие:
- Singleton: Гарантирует, что класс имеет только один экземпляр, и предоставляет к нему глобальную точку доступа. Используется для логгеров, настроек конфигурации.
- Factory Method: Определяет интерфейс для создания объектов, но позволяет подклассам определять класс создаваемого экземпляра. Применяется для создания объектов, тип которых определяется на этапе выполнения или зависит от контекста.
- Abstract Factory: Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. Используется для создания наборов зависимых объектов, например, для работы с разными базами данных.
- Builder: Отделяет конструирование сложного объекта от его представления, так что один и тот же процесс конструирования может создавать различные представления. Применяется, когда объект имеет множество необязательных параметров.
-
Структурные:
- Adapter: Преобразует интерфейс класса в другой интерфейс, который ожидают клиенты. Позволяет работать классам с несовместимыми интерфейсами.
- Decorator: Динамически добавляет новые возможности объекту, оборачивая его. Используется для расширения функциональности объектов без изменения их структуры, например, для логирования или сжатия данных в потоках ввода/вывода.
- Proxy: Предоставляет заместитель или заполнитель для другого о