Back to questions
Middle
4
Использовал ли ты паттерны проектирования (фасад, стратегия и др.)? Приведи пример.
Companies where asked
ИП Ганус Александр Андреевич
Answer from AI
sobes.tech AI
Да, я использовал различные паттерны проектирования в Python. Например, паттерн Фасад (Facade) помогает упростить взаимодействие с комплексной подсистемой, предоставляя простой интерфейс.
Пример фасада для работы с базой данных и кэшированием:
class Database:
def query(self, sql):
print(f"Выполняется запрос: {sql}")
return "данные из БД"
class Cache:
def get(self, key):
print(f"Получение из кэша: {key}")
return None
def set(self, key, value):
print(f"Запись в кэш: {key} = {value}")
class DataFacade:
def __init__(self):
self.db = Database()
self.cache = Cache()
def get_data(self, key):
data = self.cache.get(key)
if data is None:
data = self.db.query(f"SELECT * FROM table WHERE key = '{key}'")
self.cache.set(key, data)
return data
# Использование
facade = DataFacade()
result = facade.get_data('user123')
Паттерн Стратегия (Strategy) позволяет менять алгоритмы поведения объекта во время выполнения. Например, выбор метода сортировки:
from abc import ABC, abstractmethod
class SortStrategy(ABC):
@abstractmethod
def sort(self, data):
pass
class BubbleSort(SortStrategy):
def sort(self, data):
print("Сортировка пузырьком")
# реализация пузырьковой сортировки
return sorted(data) # для примера
class QuickSort(SortStrategy):
def sort(self, data):
print("Быстрая сортировка")
# реализация быстрой сортировки
return sorted(data) # для примера
class Sorter:
def __init__(self, strategy: SortStrategy):
self.strategy = strategy
def sort(self, data):
return self.strategy.sort(data)
# Использование
sorter = Sorter(BubbleSort())
sorted_data = sorter.sort([5, 3, 6, 2])
sorter.strategy = QuickSort()
sorted_data = sorter.sort([5, 3, 6, 2])
Эти паттерны помогают сделать код более гибким и поддерживаемым.