Назад к вопросам
Middle+
81
questionbank
Что такое структурные паттерны проектирования?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Структурные паттерны проектирования описывают, как классы и объекты могут быть скомбинированы для построения более крупных структур. Они помогают организовать взаимодействие между объектами, делая систему более гибкой и поддерживаемой.
Некоторые распространенные структурные паттерны:
- Адаптер (Adapter): Позволяет работать вместе классам с несовместимыми интерфейсами.
- Мост (Bridge): Отделяет абстракцию от ее реализации, позволяя им изменяться независимо.
- Компоновщик (Composite): Позволяет рассматривать группу объектов так же, как и один объект.
- Декоратор (Decorator): Динамически добавляет новое поведение к объектам без изменения их кода.
- Фасад (Facade): Предоставляет унифицированный интерфейс к набору интерфейсов в подсистеме.
- Приспособленец (Flyweight): Экономит память, разделяя общее состояние между множеством мелких объектов.
- Заместитель (Proxy): Предоставляет заместитель для другого объекта для контроля доступа к нему.
Пример применения паттерна Декоратор:
# Базовый компонент
class Coffee:
def cost(self):
return 5
def description(self):
return "Обычный кофе"
# Базовый декоратор
class CoffeDecorator:
def __init__(self, coffee):
self._coffee = coffee
def cost(self):
return self._coffee.cost()
def description(self):
return self._coffee.description()
# Конкретный декоратор
class MilkDecorator(CoffeDecorator):
def cost(self):
return self._coffee.cost() + 2
def description(self):
return self._coffee.description() + ", с молоком"
# Использование
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Обычный кофе - 5
coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Обычный кофе, с молоком - 7
Эти шаблоны обеспечивают гибкость за счет использования композиции объектов вместо наследования, что позволяет вносить изменения в систему без изменения существующего кода.