Ответ
Классические паттерны проектирования, описанные в книге "банды четырех" (GoF), делятся на три основные категории в зависимости от их назначения:
-
Порождающие (Creational) Отвечают за процессы создания объектов, позволяя сделать систему независимой от способа их создания и представления. Они помогают создавать объекты гибко и в контролируемых условиях.
- Примеры: Singleton (Одиночка), Factory Method (Фабричный метод), Abstract Factory (Абстрактная фабрика), Builder (Строитель), Prototype (Прототип).
-
Структурные (Structural) Определяют, как из классов и объектов формировать более крупные и сложные структуры, сохраняя их гибкость и эффективность. Они упрощают структуру, идентифицируя отношения между сущностями.
- Примеры: Adapter (Адаптер), Decorator (Декоратор), Facade (Фасад), Proxy (Заместитель), Composite (Компоновщик), Bridge (Мост).
-
Поведенческие (Behavioral) Отвечают за эффективное взаимодействие и распределение обязанностей между объектами. Они определяют шаблоны коммуникации между объектами.
- Примеры: Observer (Наблюдатель), Strategy (Стратегия), Command (Команда), Iterator (Итератор), State (Состояние), Chain of Responsibility (Цепочка обязанностей).
Пример порождающего паттерна (Singleton):
Этот паттерн гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.
class DatabaseConnection:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
print("Создание нового подключения к БД...")
cls._instance = super().__new__(cls)
return cls._instance
def connect(self):
print("Подключение установлено.")
# Использование
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # Выведет: True, т.к. это один и тот же объект
db1.connect()