Паттерн: Шаблонный метод (Template method)
1️⃣ Как кратко ответить
Паттерн "Шаблонный метод" — это поведенческий паттерн проектирования, который определяет скелет алгоритма в методе суперкласса, позволяя подклассам переопределять отдельные шаги алгоритма без изменения его структуры. Это позволяет избежать дублирования кода и обеспечивает гибкость в реализации алгоритма.
2️⃣ Подробное объяснение темы
Паттерн "Шаблонный метод" — это один из поведенческих паттернов проектирования, который помогает организовать код так, чтобы он был более гибким и легко расширяемым.
Что такое "Шаблонный метод"?
Представьте, что у вас есть алгоритм, который выполняет несколько шагов. Некоторые из этих шагов могут быть одинаковыми для всех реализаций, а некоторые — специфичными для каждой реализации. Паттерн "Шаблонный метод" позволяет определить общий алгоритм в базовом классе, а специфичные шаги — в подклассах.
Зачем это нужно?
- Упрощение кода: Вы можете вынести общий код в базовый класс, избегая дублирования.
- Гибкость: Легко добавлять новые реализации, просто создавая новые подклассы.
- Контроль над алгоритмом: Базовый класс контролирует структуру алгоритма, а подклассы — детали реализации.
Как это работает?
- Базовый класс: Определяет метод, который называется "шаблонным методом". Этот метод содержит скелет алгоритма, вызывая другие методы, которые могут быть переопределены в подклассах.
- Подклассы: Переопределяют специфичные шаги алгоритма, предоставляя свою реализацию.
Пример
Рассмотрим пример с приготовлением кофе и чая. Оба напитка требуют кипячения воды, заваривания, наливания в чашку и добавления добавок. Однако заваривание и добавление добавок отличаются.
class CaffeineBeverage:
def prepare_recipe(self):
self.boil_water()
self.brew()
self.pour_in_cup()
self.add_condiments()
def boil_water(self):
print("Boiling water")
def pour_in_cup(self):
print("Pouring into cup")
def brew(self):
raise NotImplementedError("This method should be overridden.")
def add_condiments(self):
raise NotImplementedError("This method should be overridden.")
class Tea(CaffeineBeverage):
def brew(self):
print("Steeping the tea")
def add_condiments(self):
print("Adding lemon")
class Coffee(CaffeineBeverage):
def brew(self):
print("Dripping coffee through filter")
def add_condiments(self):
print("Adding sugar and milk")
# Использование
tea = Tea()
tea.prepare_recipe()
coffee = Coffee()
coffee.prepare_recipe()
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться