Рубрики
Без рубрики

Шаблоны проектирования в Python

Шаблоны проектирования-это действительно важная тема в программной инженерии. В этой статье мы обсудим, что это такое, а что нет, а также погрузимся в некоторые из наиболее важных категорий шаблонов проектирования в Python.

Автор оригинала: Darinka Zobenica.

Шаблоны проектирования в Python

Вступление

Шаблоны проектирования-это многоразовые модели для решения известных и распространенных проблем в архитектуре программного обеспечения.

Они лучше всего описываются как шаблоны для работы с определенной обычной ситуацией. Архитектор может иметь шаблон для проектирования определенных видов дверных рам, которые он вписывает во многие свои проекты, а инженер-программист или архитектор программного обеспечения должен знать шаблоны для решения частых задач программирования.

Хорошая презентация шаблона дизайна должна включать в себя:

  • Имя
  • Мотивирующая проблема
  • Решение
  • Последствия

Эквивалентные Проблемы

Если бы вы думали, что это довольно нечеткая концепция, вы были бы правы. Например, мы могли бы сказать, что следующий “паттерн” решает все ваши проблемы:

  1. Извлечение и подготовка необходимых данных и других ресурсов
  2. Сделайте необходимые расчеты и выполните необходимые работы
  3. Сделайте журналы того, что вы делаете
  4. Освободите все ресурсы
  5. ???
  6. Прибыль

Это пример мышления слишком абстрактного . Вы не можете действительно назвать это шаблоном, потому что это не очень хорошая модель для решения любой проблемы, несмотря на то, что она технически применима к любой из них (включая приготовление обеда).

С другой стороны, у вас могут быть решения, которые слишком конкретны, чтобы их можно было назвать шаблоном. Например, вы можете задаться вопросом, является ли QuickSort шаблоном для решения проблемы сортировки.

Это, безусловно, распространенная проблема программирования, и QuickSort-хорошее решение для нее. Однако он может быть применен к любой проблеме сортировки практически без изменений.

Как только он у вас есть в библиотеке и вы можете его вызвать, ваша единственная реальная задача-сделать ваш объект каким-то образом сопоставимым, вам действительно не нужно иметь дело с его сущностью самостоятельно, чтобы изменить его в соответствии с вашей конкретной проблемой.

Эквивалентные проблемы находятся где – то между этими понятиями. Это разные проблемы, которые достаточно похожи, чтобы вы могли применить к ним одну и ту же модель, но достаточно разные, чтобы эта модель была значительно изменена, чтобы быть применимой в каждом конкретном случае.

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

Зачем использовать шаблоны проектирования?

Вы, вероятно, знакомы с некоторыми шаблонами проектирования уже через практику написания кода. Многие хорошие программисты в конечном итоге тяготеют к ним, даже не будучи явно обученными, или просто берут их у старших по пути.

Мотивы для создания, изучения и использования шаблонов проектирования разнообразны. Это способ дать названия сложным абстрактным понятиям, чтобы обеспечить возможность обсуждения и обучения.

Они делают общение внутри команд быстрее, потому что кто-то может просто использовать имя шаблона вместо того, чтобы выхватывать доску. Они позволяют вам учиться на опыте людей, которые были до вас, вместо того, чтобы изобретать велосипед, проходя через все горнило постепенно улучшающихся практик самостоятельно (и постоянно съеживаться от своего старого кода).

Плохие решения, которые, как правило, обычно изобретаются, потому что они кажутся логичными на первый взгляд, часто называются анти-паттернами . Для того, чтобы что-то справедливо называлось анти-паттерном, его нужно обычно изобретать заново, и для той же самой проблемы должен быть паттерн, который решает ее лучше.

Несмотря на очевидную полезность на практике, шаблоны проектирования также полезны для обучения. Они знакомят вас со многими проблемами, которые вы, возможно, не рассматривали, и позволяют вам думать о сценариях, с которыми вы, возможно, не имели практического опыта.

Они обязательны для всех, и они являются исключительно хорошим учебным ресурсом для всех начинающих архитекторов и разработчиков, которые, возможно, находятся в начале своей карьеры и не имеют непосредственного опыта борьбы с различными проблемами, которые предоставляет отрасль.

Шаблоны проектирования в Python

Традиционно шаблоны проектирования делятся на три основные категории: Креативные , Структурные и Поведенческие|/. Существуют и другие категории, такие как архитектурные или параллелизм паттерны, но они выходят за рамки данной статьи.

Существуют также специфические для Python шаблоны проектирования, которые создаются специально вокруг проблем, которые предоставляет сама структура языка, или которые решают проблемы специальными способами, которые разрешены только из-за структуры языка.

Creational Design Patterns дело с созданием классов или объектов. Они служат для абстрагирования специфики классов, чтобы мы меньше зависели от их точной реализации, или чтобы нам не приходилось иметь дело со сложными конструкциями всякий раз, когда они нам нужны, или чтобы мы обеспечивали некоторые специальные свойства создания экземпляров. Они очень полезны для снижения уровня зависимости и контроля того, как пользователь взаимодействует с нашими классами.

Структурные шаблоны проектирования имеют дело со сборкой объектов и классов в более крупные структуры, сохраняя при этом эти структуры гибкими и эффективными. Они, как правило, действительно полезны для улучшения читабельности и ремонтопригодности кода, обеспечения правильного разделения функциональных возможностей, инкапсуляции и наличия эффективных минимальных интерфейсов между взаимозависимыми вещами.

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

Шаблоны Творческого Проектирования

  • Фабрика
  • Абстрактная фабрика
  • Строитель
  • Прототип
  • Синглтон
  • Пул объектов

Структурные Модели Проектирования

  • Адаптер
  • Мост
  • Составной
  • Оформитель
  • Фасад
  • Вес мухи
  • Полномочие

Поведенческие Шаблоны Проектирования

Скоро будет!

  • Цепочка ответственности
  • Команда
  • Итератор
  • Посредник
  • Сувенир
  • Наблюдатель
  • Государство
  • Стратегия
  • Посетитель

Шаблоны проектирования, Специфичные Для Python

Скоро будет!

  • Глобальный Шаблон объекта
  • Шаблон Метода Предварительной Привязки
  • Шаблон объекта Sentinel

См. Также