Что такое паттерн в питоне

Введение в Python

Поиск

Новое на сайте

Паттерны проектирования в Python

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

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

Обычно выделяют следующие группы шаблонов проектирования:

Порождающие шаблоны проектирования

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

Абстрактная фабрика Abstract FactoryПозволяет создавать семейства взаимосвязанных или взаимозависимых объектов, без указания их конкретных классов.
Строитель BuilderИнтерфейс для пошагового создания сложных объектов.
Фабричный метод Factory MethodОбщий интерфейс для создания объектов в суперклассе, позволяющий подклассам определять тип создаваемого объекта.
Объектный пул Object PoolПозволяет использовать уже созданный объект вместо создания нового, в ситуации, когда создание нового объекта требует большого количества ресурсов.
Прототип PrototypeПозволяет копировать объекты без необходимости учитывать особенности их реализации.
Одиночка SingletonГарантирует, что у класса есть только один экземпляр и предоставляет глобальную точку доступа к нему.
Отложенная инициализация Lazy initializationСоздание объекта, непосредственно перед его использованием.
Мультитон MultitonШаблон позволяющий создавать несколько одиночек (Singleton), доступ и управление которыми производится через ассоциативную таблицу, например словарь.

Струкурные шаблоны проектирования

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

Адаптер AdapterСоздание объекта-посредника, который позволит взаимодействовать двум несовместимым объектам.
Мост BridgeРазделяет класс на отдельные части: внешнюю абстракцию и внутреннюю реализацию.
Компоновщик CompositeИдея состоит в том, что группа объектов (контейнер) и сам объект (содержимое контейнера) обладают тем же набором свойств, что позволяет работать с группой как с целым объектом.
Декоратор DecoratorДобавляет, убирает или изменяет поведение декорированного объекта.
Фасад FacadeОбертка сложной системы, модуля, пакета в простой интерфейс.
Приспособленец FlyweightИспользование совместных ресурсов для похожих объектов, вместо выделения ресурсов для каждого объекта по отдельности.
Прокси ProxyСоздание объекта-подложки для реального объекта, чтобы контролировать обращения к нему, изменять или перенаправлять их.

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

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

Цепочка обязанностейChain of responsibilityПоследовательная передача запросов по списку объектов, которые эти запросы обрабатывают и/или передают дальше по цепочке.
Итератор IteratorПозволяет последовательно получать объекты из контейнера, не раскрывая особенности реализации контейнера. В Python доступен на встроенном уровне.
Команда CommandДобавляет слой абстракции между действием и объектом, который это действие вызывает, например, кнопка и действие, которое выполняется при нажатии на эту кнопку.
Посредник MediatorСоздание такой структуры, в которой объекты не общаются друг с другом, а используют для этого объект-посредник.
Хранитель MementoСохраняет состояние объекта на определенный момент для того, чтобы при необходимости к нему можно было вернуться.
Null Object Null ObjectОбъект который может использоваться в случае отсутствия нужного объекта или объект по умолчанию.
Наблюдатель ObserverОбъект «наблюдающий» за состоянием других объектов, информирующий систему / пользователя про изменения состояния наблюдаемого объекта, например пуш-извещения.
Состояние StateПозволяет изменять поведение объекта в зависимости от его состояния.
Стратегия StrategyПозволяет объединить несколько алгоритмов в группу. Порядок применения алгоритмов может изменяться, благодаря чему достигается гибкость всей системы.
Шаблонный метод Template methodСоздание базовых методов и алгоритма их применения в абстрактном родительском классе с тем, чтобы определить конкретные методы в дочерних классах.
Посетитель VisitorШаблон, позволяющий выполнять операции над другими объектами, без необходимости изменять эти объекты.

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

Источник

Toly blog

Python and Django notes

Передовые паттерны проектирования в Python

Генераторы

Если вы очень долго используете Python, скорее всего вы слышали о генераторах списков. Они подходят для цикла, блока if и способны уместить все это в одну строку. Другими словами, вы можете отобразить (map) и отфильтровать (filter) список одним выражением.

Генератор списка состоит из следующих частей:

Допустим, нам нужно получить список всех квадратов целых чисел, которые больше нуля:

Согласитесь, довольно просто? Но это занимает 4-е строчки, 2-у уровня вложенности, и вдобавок мы делаем довольно тривиальную вещь. Вы можете уменьшить количество кода с помощью функций filter, lambda и map:

Теперь код расширяется горизонтально! Что можно сделать, что бы упростить код? Применить генераторы списков.

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

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

Это даже немного эффективнее использования генераторов списков. Заменим пример более эффективным кодом:

Использование выражения-генератора вероятно более хорошая практика, но вы не увидите разницы в эффективности, если список не очень велик.

Так же, вы можете использовать функцию zip для работы с двумя и более элементами за раз:

Пример двухуровневого генератора с использованием os.walk():

Декораторы

Символ @ указывает на применение декоратора.

Теперь давайте реализуем код декоратора. Здесь мы фактически используем код декорируемой функции:

Когда вы пишете код вроде этого:

это то же самое, как если бы выполнялось следующее

Код внитри декоратора обычно включает в себя создание новой функции, которая принимает любые аргументы (с использованием *args и **kwargs) как показано в случае с функцией wrapper в этом примере. Внутри этой функции вы принимает входные аргументы оригинальной функции и возвращаете результат. Однако, вы так же можете разместить там дополнительный код (например, замер времени и т.д.). Таким образов созданная функция-обертка возвращает результат, как если бы это была оригинальная функция.

Давайте рассмотрим другой пример:

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

Что должен делать декоратор после вызова? Вообще-то, все что угодно, но обычно ожидается, что будет использован код оригинальной функции. Однако, это не обязательно:

ContextLib (менеджеры контекста)

Заново напишем исходный пример, используя декоратор @contextmanager из модуля contextlib:

Дескрипторы

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

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

Метаклассы

Метаклассы предлагают мощный способ изменить поведение классов в Python.

Метакласс определяется как “класса класса”. Любой класс, экземпляры которого являются сами классы, является метаклассом.

Паттерны

“Проще просить прощения, чем разрешения”

Синглтон (одиночка)

Null object

Null object может быть использован вместо None, что бы избежать проверки на None.

Обозреватель

Паттерн обозреватель позволяет нескольким объектам иметь доступ к общим данным.

Конструктор

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

Заключение

Спасибо за чтение. Оставляйте свои ​​комментарии для дальнейшего обсуждения.

Источник

Шаблоны в Python

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Введение в паттерны в Python

На языке Python мы можем создавать шаблоны, используя For Loops. Здесь мы можем манипулировать ими для циклов и, таким образом, мы можем напечатать инструкцию, чтобы иметь уникальный шаблон, такой как звезды, числовой и символьный шаблон. Мы можем использовать любой из доступных на рынке компиляторов python для выполнения программ.

Типы паттернов и примеров

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

Тип 1. Звездный узор

Программа для печати пирамидальных узоров звезд.

Пример 1

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

Код
#Python Program for printing pyramid pattern using stars
for i in range ( 0, 5 ):
for j in range ( 0, i+1 ):
print ( «* «, end=»» )
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Примечание. Параметр end в python используется для завершения оператора print любым символом или строкой с использованием параметра end.

Пример 2

Теперь давайте попробуем повернуть вышеупомянутую пирамиду на 180 градусов, чтобы мы могли получить другой стиль для рисунка звезды . В этом примере мы начали печатать звезды таким же образом, но с правой стороны или самого последнего столбца с левой стороны или с самого первого столбца с правой стороны или с 0-го ряда и 4- го столбца или с 1- й ряд и 5- й столбец.

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 3

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

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 4

Теперь давайте посмотрим еще одну программу, после которой мы завершим иллюстрацию звездного рисунка. Существует небольшая разница между вышеуказанной программой и второй, то есть б), здесь мы пытаемся напечатать одну звезду в первой строке, затем 3 звезды во второй строке, 5 в третьей и так далее, поэтому мы увеличиваем «Л» считать на 2 в конце секунды для цикла.

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Тип 2. Числовой шаблон

Теперь мы обсудим некоторые примеры числового шаблона.

Пример 1

Теперь мы попытаемся напечатать рисунок чисел из пирамиды. Таким образом, это будет выглядеть так: В первом ряду вы увидите число 1, а во втором ряду будут номера 2 и 3, в третьем ряду номера 4, 5 и 6, и серия будет продолжаться следующим образом.,

Код
# Python Numeric Pattern Example 1
k = 1
for i in range(0, 5):
for j in range(0, i+1):
print(k, end=» «)
k = k + 1
print(), /code>

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 2

Давайте теперь попробуем напечатать рисунок пирамиды на числах в еще одном стиле. Здесь мы попытаемся напечатать номер 1 в первом ряду, номера 1 и 2 во втором ряду, номера 1, 2 и 3 в третьем ряду, и так будет продолжаться.

Код
# Python Numeric Pattern Example 2
for i in range(0, 5) :
num = 1
for j in range(0, i+1):
print(num, end=» «)
num = num + 1
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 3

Вот еще один пример программы на python для печати чисел в шаблонах форм. Здесь мы пытаемся завершить строку квадратами номера строки, используя два цикла for и увеличивая значение переменной numb на 1 во внутреннем цикле for и увеличивая значение переменной inc на 2 для внешнего цикла for.

# Python Numeric Pattern Example 3
numb = 1
inc = 1
for i in range(0, 5):
for j in range(0, inc):
print(numb, end=» «)
numb = numb + 1
print()
inc = inc + 2

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Существуют и другие примеры, и я постараюсь кратко изложить их здесь.

Пример 4

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

# Python Numeric Pattern Example 4
for num in range(10):
for i in range(num):
print (num, end=» «) #printing the number
# We will use new line in order to display the pattern correctly
print(«\n»)

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 5

В этом примере мы попытаемся увидеть число и, следовательно, напечатать его по столбцам. Первый столбец будет начинаться с указанного диапазона значений, таких как (1, 2, 3, 4 и 5), второй столбец будет начинаться с номера строки секунда, третий столбец будет начинаться с строки номер 3 и будет продолжаться до цикла концы.

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 6

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

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 7

Это похоже на предыдущие программы.

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 8

Здесь мы попытаемся напечатать число в обратном порядке в виде прямоугольного треугольника.

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Тип 3. Образец персонажа

Теперь мы увидим некоторые примеры паттерна персонажа.

Пример 1

Здесь мы попытаемся отобразить рисунок пирамиды из алфавитов. Значение ASCII заглавной буквы A начинается с 65, что означает, что значение ASCII для заглавной буквы Z будет 90. В этом примере мы преобразуем числовое значение 65 в заглавную букву A и, следовательно, выполняем итерацию по циклу для увеличения « переменная ».

# Python Character Pattern Example 1
value = 65
for i in range(0, 5):
for j in range(0, i+1):
ch = chr(value)
print(ch, end=» «)
value = value + 1
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 2

Здесь мы будем повторять символ количество раз номер строки. Вот простая иллюстрация того, как мы можем это сделать.

# Python Character Pattern Example 2
value = 65
for i in range(0, 5):
for j in range(0, i+1):
ch = chr(value)
print(ch, end=» «)
value = value + 1
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 3

Это будет похоже на пример а) за исключением того, что мы заканчиваем номер строки на 2 значения больше, чем предыдущая строка. Чтобы достичь этого, мы включили еще одну переменную с именем «inc» и увеличиваем ее на 2 во внешнем цикле for.

# Python Character Pattern Example 3
value patterns of stars 65
inc = 1
for i in range(0, 5):
for j in range(0, inc):
ch = chr(value)
print(ch, end=» «)
value = value + 1
inc = inc + 2
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 4

Этот пример похож на а), но здесь мы повернули рисунок на 180 градусов.

# Python Character Pattern Example 4
decrement = 8
counter = 64
value = 65
for i in range(0, 5):
for k in range(0, decrement):
print(end=» «)
for j in range(0, i+1):
counter = counter + 1
value = counter
temp = value
for j in range(0, i+1):
ch = chr(value)
print(ch, end=» «)
value = value 1
value = temp
decrement = decrement 2
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Теперь, когда вы увидели эти многочисленные примеры, давайте попробуем нарисовать несколько интересных шаблонов.

Пример 5

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

# Python Program to Print Square Star Pattern
square_side = int(input(«Please enter the square dimension : «))
print(«Square Pattern»)
for i in range(square_side):
for i in range(square_side):print(«$», end = ‘ ‘)
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

Пример 6

# Python Program to Print Square Star Pattern
square_side = int(input(«Please Enter dimension of square : «))
print(«Star Square Pattern»)
for i in range(square_side):
for i in range(square_side):
print(‘*’, end = ‘ ‘)
print()

Выход:

Что такое паттерн в питоне. Смотреть фото Что такое паттерн в питоне. Смотреть картинку Что такое паттерн в питоне. Картинка про Что такое паттерн в питоне. Фото Что такое паттерн в питоне

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

Рекомендуемые статьи

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

Источник

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Традиционно шаблоны проектирования разделены на три основные категории: порождающие, структурные и поведенческие. Существуют и другие категории, такие как архитектурные (architectural) или параллельные (concurrency) шаблоны, но они выходят за рамки этой статьи.

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

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

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

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

Порождающие шаблоны

Струтктурные шаблоны

Coming soon!

Поведенческие шаблоны

Coming soon!

Шаблоны специфичные для Python

Coming soon!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *