Sobes.tech
Middle
36

Care este diferența dintre modelele de proiectare Strategy și Template Method?

Companiile au fost întrebate
Лига Цифровой ЭкономикиЛига Цифровой Экономики

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