Шаблонный метод (Template Method)

Назначение

 

Шаблонный метод определяет основу алгоритма (каркас) и позволяет подклассам переопределять некоторые шаги алгоритма, не изменяя его структуры в целом. Таким образом, контракт между базовым классом и его наследниками определяется более чётко, чем это делается простым наследованием. За счёт определения каркаса алгоритма в базовом классе, мы избегаем лишнего дублирования кода.

 

Диаграмма

 

TemplateMethod

Шаблонный метод

 

Пример

 

В примере представлен шаблонный метод расчёта скидки по двум показателям: скидка по продукту и скидка по покупателю, большая из них идет в расчёт. Конкретный класс расчёта скидки реализует определенные в каркасе методы расчёта скидок, а клиент уже используя абстракцию, получает размер скидки.

К недостаткам применения данного паттерна можно отнести случай, когда требуется работа с конкретным наследником и его данными (методами, атрибутами) не определенными в базовом классе, соответственно клиент работает с конкретной реализацией и принцип OCP (SOLID) нарушается.