Вступление
Шаблоны проектирования - это модели многократного использования для решения известных и распространенных проблем в архитектуре программного обеспечения.
Их лучше всего описать как шаблоны для работы в определенной обычной ситуации. У архитектора может быть шаблон для проектирования определенных видов дверных проемов, который он вписывает во многие свои проекты, а инженер-программист или архитектор программного обеспечения должны знать шаблоны для решения частых задач программирования.
Хорошая презентация паттерна проектирования должна включать:
- Имя
- Мотивирующая проблема
- Решение
- Последствия
Эквивалентные проблемы
Если бы вы думали, что это довольно расплывчатое понятие, вы были бы правы. Например, мы могли бы сказать, что следующий «шаблон» решает все ваши проблемы:
- Получите и подготовьте необходимые данные и другие ресурсы
- Сделайте необходимые расчеты и выполните необходимые работы
- Делайте журналы того, что вы делаете
- Освободить все ресурсы
- ???
- Выгода
Это пример слишком абстрактного мышления. Вы не можете назвать это шаблоном, потому что это не совсем хорошая модель для решения любой проблемы, несмотря на то, что технически применима к любой из них (включая приготовление обеда).
С другой стороны, у вас могут быть решения, которые слишком конкретны, чтобы их можно было назвать шаблоном. Например, вы можете задаться вопросом, является ли QuickSort шаблоном для решения проблемы сортировки.
Это, безусловно, обычная проблема программирования, и QuickSort - хорошее ее решение. Однако его можно применить к любой задаче сортировки практически без изменений.
Если у вас есть его в библиотеке и вы можете его вызывать, ваша единственная реальная задача - сделать ваш объект каким-то образом сопоставимым, вам действительно не нужно разбираться с его сутью самостоятельно, чтобы модифицировать его в соответствии с вашей конкретной проблемой.
Равнозначные проблемы находятся где-то между этими концепциями. Это разные проблемы, которые достаточно похожи, чтобы вы могли применить к ним одну и ту же модель, но достаточно разные, чтобы эту модель нужно было значительно настраивать, чтобы можно было применять в каждом случае.
Паттерны, которые могут быть применены к такого рода проблемам, - это то, что мы можем осмысленно дублировать паттернами проектирования .
Зачем использовать шаблоны дизайна?
Вы, вероятно, знакомы с некоторыми шаблонами проектирования уже через практику написания кода. Многие хорошие программисты в конечном итоге тянутся к ним, даже если их не учат явно, или они просто заимствуют их у старших по пути.
Мотивы для создания, изучения и использования шаблонов проектирования разнообразны. Это способ дать имена сложным абстрактным концепциям, чтобы их можно было обсуждать и обучать.
Они ускоряют общение в командах, потому что кто-то может просто использовать название шаблона вместо того, чтобы вынимать доску. Они позволяют вам учиться на опыте людей, которые были до вас, вместо того, чтобы изобретать велосипед, самостоятельно проходя через весь тигель постепенного улучшения практик (и постоянно передергивая свой старый код).
Плохие решения, которые обычно изобретаются, потому что на первый взгляд они кажутся логичными, часто называют антипаттернами . Чтобы что-то по праву называлось антипаттерном, его нужно изобретать заново, и должен существовать образец для той же проблемы, который решает это лучше.
Несмотря на очевидную практическую полезность, шаблоны проектирования также полезны для изучения. Они знакомят вас со многими проблемами, которые вы, возможно, не рассматривали, и позволяют подумать о сценариях, которые у вас, возможно, не было на практике.
Их необходимо изучить всем, и они являются исключительно хорошим учебным ресурсом для всех начинающих архитекторов и разработчиков, которые, возможно, только начинают свою карьеру и не имеют непосредственного опыта решения различных проблем, возникающих в отрасли.
Шаблоны проектирования в Python
Традиционно шаблоны проектирования подразделяются на три основные категории: творческие , структурные и поведенческие . Существуют и другие категории, такие как архитектурные шаблоны или шаблоны параллелизма , но они выходят за рамки данной статьи.
Существуют также специфичные для Python шаблоны проектирования, созданные специально для проблем, которые предоставляет сама структура языка, или которые решают проблемы особым образом, что разрешено только из-за структуры языка.
Шаблоны Creational Design Patterns имеют дело с созданием классов или объектов. Они служат для абстрагирования от специфики классов, чтобы мы были менее зависимы от их точной реализации, или чтобы нам не приходилось иметь дело со сложной конструкцией всякий раз, когда они нам нужны, или чтобы мы обеспечивали некоторые специальные свойства создания экземпляров. . Они очень полезны для снижения уровней зависимости и управления тем, как пользователь взаимодействует с нашими классами.
Структурные шаблоны проектирования предназначены для сборки объектов и классов в более крупные структуры, сохраняя при этом гибкость и эффективность этих структур. Они, как правило, действительно полезны для улучшения читаемости и ремонтопригодности кода, обеспечения правильного разделения, инкапсуляции функций и наличия эффективных минимальных интерфейсов между взаимозависимыми объектами.
Шаблоны поведенческого проектирования имеют дело с алгоритмами в целом и распределением ответственности между взаимодействующими объектами. Например, это хорошая практика в тех случаях, когда у вас может возникнуть соблазн реализовать наивное решение, например, занятое ожидание , или загрузить в свои классы ненужный код для одной конкретной цели, которая не является ядром их функциональности.
Шаблоны творческого дизайна
Структурные шаблоны проектирования
Шаблоны поведенческого дизайна
Скоро будет!
- Цепочка ответственности
- Командование
- Итератор
- Посредник
- Memento
- Наблюдатель
- Состояние
- Стратегия
- Посетитель
Шаблоны проектирования для Python
Скоро будет!
- Шаблон глобального объекта
- Шаблон метода предварительной привязки
- Образец объекта Страж
Смотрите также
- Шаблоны проектирования на Java
- Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения{.amazon-link} , известная как книга "Банда четырех" (GoF) по шаблонам проектированияw