.Net developer, data scientist
Это видео является первым видео в серии видео, посвященных шаблонам проектирования. Я надеюсь, что данная серия видео принесёт пользу сразу в нескольких направлениях:
В данный момент я планирую создавать видео о шаблонах проектирования по следующей схеме:
Первым шаблоном проектирования, с которым мы познакомимся, будет Шаблонный Метод или Template Method на английском языке. Я начал именно с него потому, что данный шаблон проектирования мне нравится: он упорядочивает код, позволяет проследить его логику от начала до конца и я его очень часто использую в моей повседневной практике.
Если вы получили задание, которое представляет собой список определенных последовательных действий, то возможно здесь вы можете использовать Шаблонный Метод. Примером списка действий может быть следующий список:
Обратите внимание что я специально не указал о каком напитке идёт речь – это может быть чай, кофе, какао, чай с молоком в английском стиле или вообще простое молоко с сахаром. Давайте рассмотрим каждый из 4 пунктов и подумаем, что может быть под каждым из этих пунктов:
Итак – мы выделили 4 шага приготовления горячего напитка из которых один шаг является постоянным (3 шаг) для всех напитков и 3 шага являются изменяемыми. Давайте по этой схеме напишем 2 рецепта горячих напитков: черный чай и кофе с молоком.
Черный чай:
Кофе с молоком:
А теперь вернемся к программированию. Список последовательных действий, который мы получили от нашего начальства – можно назвать шаблоном. Аналогом шаблона в коде будет абстрактный класс. Каждое действие в списке — это метод. Названия методов должны быть как можно более абстрактными – обратите внимание какие формулировки я выбрал для списка действия для приготовления горячего напитка. Если метод в абстрактном классе общий для всех реализаций данного класса (в нашем случае для каждого напитка), то его можно реализовать в абстрактном классе. В нашем случае метод «залей основной ингредиент напитка горячей жидкостью» является общим для всех и его можно реализовать в абстрактном классе. Остальные 3 метода для каждого напитка уникальны и поэтому они будут обозначены как абстрактные методы в абстрактном классе. То есть реализовать данные методы необходимо в конкретных реализациях абстрактного класса «Горячий напиток», то есть «Чёрный чай» и «Кофе с молоком».
Итого, что мы имеем: 3 класса – 1 абстрактный класс «Горячий напиток», который содержит шаблон и 2 класса реализации абстрактного класса «Чёрный чай» и «Кофе с молоком».
Что мы сделали – то, что является постоянным для всех напитков, мы оставили в абстрактном классе, а то, что изменяется, мы обозначили ключевым словом abstract. То есть мы разделили постоянные и изменяемые части нашего кода.
Теперь давайте посмотрим как это работает в коде.
Пример кода из видео на GitHub
Для открытия файла проекта необходимо Visual Studio 2019.