Чему научился:
Оказывается, я уже использовал данный шаблон, не зная о его названии (и о его существовании). Есть некоторое устройство, с которого необходимо прочитать информацию. Это устройство может быть подключено либо к COM-порту, либо по сети с использованием TCP/IP/ Общий алгоритм описан в абстрактном классе: подключиться, прочитать данные, отключиться. А вот конкретные классы реализуют непосредственно методы подключения и отключения для последовательного порта и для сокета.
Бытовой пример - отвертка со сменными битами. Сама отвертка без вставленной биты смысла не имеет, она абстрактна. Но она реализует алгоритм "закрутить" и "раскрутить". А вот конкретные биты уже используются для работы с конкретными болтами и гайками.
Спасибо за картинку. Очень наглядно и доходчиво. Кроме того, образы легче запоминаются и намного дольше остаются в памяти. определения же выветриваются за неделю, максимум месяц. И вряд ли я через полгода вспомнил бы об абстрактном классе, который определяет основной алгоритм, а его наследники переопределяют некоторые его действия, не изменяя его структуры в целом. Теперь же смотря на эту отвертку с насадками, мне все становится легко и понятно.... Также иду этот курс...
Научился: шаблонный метод используется в случаях когда при работе с разными классами теребуется произвести серию похожих действий.
например для принятие заказа в ресторане фаст фуд требуется внести заказ, посчитать итоговую сумму, выдать сдачу. Эти действия будут общими для любого заказа. При этом заказы могут отличаться, по признаку требуется ли готовка (гамбургер дополнительное отправление заказа на кухню) или нет (предоставление напитка из бара).
По тем действиям, которые отличаются - в абстрактном классе создается абстрактный метод, который затем реализуется в отдельных классах.
Научился: Интересный паттерн и когда писал сборник игр, вот такие операции, как инициализация запуск пауза результат у всех игр разный, но последовательность действий одинаковая.