← Назад ко всем вопросам

Паттерн: Шаблонный метод (Template method)

1️⃣ Как кратко ответить

Паттерн "Шаблонный метод" — это поведенческий паттерн проектирования, который определяет скелет алгоритма в методе суперкласса, позволяя подклассам переопределять отдельные шаги алгоритма без изменения его структуры. Это позволяет избежать дублирования кода и обеспечивает гибкость в реализации алгоритма.

2️⃣ Подробное объяснение темы

Паттерн "Шаблонный метод" — это один из поведенческих паттернов проектирования, который помогает организовать код так, чтобы он был более гибким и легко расширяемым.

Что такое "Шаблонный метод"?

Представьте, что у вас есть алгоритм, который выполняет несколько шагов. Некоторые из этих шагов могут быть одинаковыми для всех реализаций, а некоторые — специфичными для каждой реализации. Паттерн "Шаблонный метод" позволяет определить общий алгоритм в базовом классе, а специфичные шаги — в подклассах.

Зачем это нужно?

  • Упрощение кода: Вы можете вынести общий код в базовый класс, избегая дублирования.
  • Гибкость: Легко добавлять новые реализации, просто создавая новые подклассы.
  • Контроль над алгоритмом: Базовый класс контролирует структуру алгоритма, а подклассы — детали реализации.

Как это работает?

  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()

Тема: ООП
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки