Sobes.tech
Назад к вопросам
Middle
5

Использовал ли ты паттерны проектирования (фасад, стратегия и др.)? Приведи пример.

Компании, где спрашивали
ИП Ганус Александр Андреевич

Ответ от нейросети

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])

Эти паттерны помогают сделать код более гибким и поддерживаемым.