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