Sobes.tech
Middle
19

В чем разница между паттернами проектирования Strategy и Template Method?

Компании, где спрашивали
Лига Цифровой ЭкономикиЛига Цифровой Экономики

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

sobes.tech AI

Паттерны Strategy и Template Method решают разные задачи, хотя оба связаны с вариациями поведения:

  • Strategy — определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Клиент выбирает нужную стратегию во время выполнения.

  • Template Method — определяет скелет алгоритма в базовом классе, а конкретные шаги реализуются в подклассах. Шаблон фиксирует структуру, позволяя подклассам изменять детали.

Пример на Python:

from abc import ABC, abstractmethod

# Template Method
class DataProcessor(ABC):
    def process(self):
        self.load_data()
        self.transform_data()
        self.save_data()

    @abstractmethod
    def load_data(self): pass

    @abstractmethod
    def transform_data(self): pass

    def save_data(self):
        print("Saving data")

class CSVProcessor(DataProcessor):
    def load_data(self):
        print("Loading CSV")
    def transform_data(self):
        print("Transforming CSV")

# Strategy
class CompressionStrategy(ABC):
    @abstractmethod
    def compress(self, data): pass

class ZipCompression(CompressionStrategy):
    def compress(self, data):
        print("Compressing using ZIP")

class RarCompression(CompressionStrategy):
    def compress(self, data):
        print("Compressing using RAR")

class Compressor:
    def __init__(self, strategy: CompressionStrategy):
        self.strategy = strategy

    def compress_data(self, data):
        self.strategy.compress(data)

# Использование
compressor = Compressor(ZipCompression())
compressor.compress_data("my_data")

Итого: Template Method фиксирует алгоритм и позволяет подклассам менять шаги, Strategy позволяет менять алгоритм целиком во время выполнения.