Какие знаешь паттерны проектирования
Паттерны проектирования — это типовые решения частых проблем в объектно-ориентированном проектировании.
Они делятся на три основные группы:
1. Порождающие паттерны (Creational Patterns)
Решают проблемы создания объектов. Они абстрагируют процесс инстанцирования, делая систему независимой от способа создания, композиции и представления объектов.
a) Одиночка (Singleton)
Задача: Гарантировать, что у класса есть только один экземпляр, и предоставить к нему глобальную точку доступа.
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
# Использование
obj1 = Singleton()
obj2 = Singleton()
print(obj1 is obj2) # True - это один и тот же объектb) Фабричный метод (Factory Method)
Задача: Определить интерфейс для создания объекта, но позволить подклассам изменять тип создаваемых объектов.
c) Строитель (Builder)
Задача: Разделить сложный конструктор объекта на отдельные шаги, чтобы один и тот же процесс конструирования мог создавать разные представления.
2. Структурные паттерны (Structural Patterns)
Решают проблемы композиции объектов. Они показывают, как из отдельных объектов составлять более крупные структуры.
a) Адаптер (Adapter)
Задача: Преобразовать интерфейс класса к другому интерфейсу, который ожидают клиенты.
class OldSystem:
def old_method(self):
return "Старая система"
class NewSystem:
def new_method(self):
return "Новая система"
class Adapter:
def __init__(self, system):
self.system = system
def old_method(self):
return self.system.new_method()
# Использование
old = OldSystem()
new = NewSystem()
adapter = Adapter(new)
print(adapter.old_method()) # "Новая система"b) Декоратор (Decorator)
Задача: Динамически добавлять объекту новую функциональность, оборачивая его в объект-декоратор.
c) Фасад (Facade)
Задача: Представить простой интерфейс к сложной системе классов.
3. Поведенческие паттерны (Behavioral Patterns)
Решают проблемы эффективного взаимодействия между объектами. Они определяют, как объекты общаются и распределяют ответственность.
a) Наблюдатель (Observer)
Задача: Определить зависимость "один ко многим" между объектами, чтобы при изменении состояния одного объекта все зависящие от него объекты автоматически уведомлялись.
class Subject:
def __init__(self):
self._observers = []
def attach(self, observer):
self._observers.append(observer)
def notify(self, message):
for observer in self._observers:
observer.update(message)
class Observer:
def update(self, message):
print(f"Получено сообщение: {message}")
# Использование
subject = Subject()
observer1 = Observer()
observer2 = Observer()
subject.attach(observer1)
subject.attach(observer2)
subject.notify("Данные обновлены!")b) Стратегия (Strategy)
Задача: Определить семейство алгоритмов, инкапсулировать каждый из них и делать их взаимозаменяемыми.
c) Состояние (State)
Задача: Позволить объекту изменять свое поведение при изменении его внутреннего состояния.

офферы быстрее!
Следующий вопрос
Это единственный вопрос по вашему фильтру