Sobes.tech
Middle
37

Wat is het verschil tussen de ontwerp patronen Strategy en Template Method?

Bedrijven waar gevraagd werd
Лига Цифровой ЭкономикиЛига Цифровой Экономики

Antwoord van AI

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 позволяет менять алгоритм целиком во время выполнения.