See how a minor change to your commit message style can make a difference.
Tip
Take a look at git-conventional-commits , a CLI util to ensure these conventions, determine version and generate changelogs
See how a minor change to your commit message style can make a difference.
Tip
Take a look at git-conventional-commits , a CLI util to ensure these conventions, determine version and generate changelogs
| ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ: | |
| Паттерны предназначены для решения типичных задач, возникающих в ходе проектирования. Любой паттерн описывает задачу, которая снова и снова возникает в нашей работе, а также принцип ее решения, причем таким образом, что это решение можно потом использовать миллион раз, ничего не изобретая заново. | |
| Все паттерны обеспечивают возможность изменения некоторой части системы независимо от других частей. | |
| -- Паттерн — решение задачи в контексте. | |
| Не самое понятное определение, вы не находите? Не беспокойтесь, мы разберем все его составляющие — все эти контексты, задачи и решения: | |
| - Контекстом называется ситуация, в которой применяется паттерн. Ситуация должна быть достаточно типичной и распространенной. | |
| - Задачей называется цель, которой вы хотите добиться в контексте, в совокупности со всеми ограничениями, присущими контексту. | |
| - Решением называется обобщенная архитектура, которая достигает заданной цели при соблюдении набора ограничений. Решение должно быть возможно применять снова |
| /** | |
| * | |
| * ПАТТЕРН ЗАМЕСТИТЕЛЬ (proxy) | |
| * Предоставляет суррогатный объект, управляющий доступом к другому объекту. | |
| * | |
| * Заместитель это обертка, которая применяется в следующих случаях: | |
| * 1. Ленивая инициализация (виртуальный прокси). Когда у вас есть тяжёлый объект, | |
| * грузящий данные из файловой системы или базы данных. | |
| * 2. Защита доступа (защищающий прокси). Когда в программе есть разные типы пользователей, и вам хочется | |
| * защищать объект от неавторизованного доступа. Прокси может проверять доступ при каждом вызове и передавать |
| /** | |
| * | |
| * ПАТТЕРН МОСТ (bridge) | |
| * | |
| * Паттерн МОСТ - отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и | |
| * другое. Это структурный паттерн проектирования, который разделяет один или несколько классов на две отдельные | |
| * иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга. | |
| * Например у нас есть класс Круг, и мы хотим создавать круги разного цвета, для этого нужно будет создать подклассы | |
| * Синий Круг, Желтый круг и т.д. А если потом появятся квадраты и треугольники, то для них тоже нужно будет создавать | |
| * большое количество подклассов. В итоге иерархия будет огромной. Логичнее создать две независимых иерархии - |
| /** | |
| * | |
| * ПАТТЕРН СТРОИТЕЛЬ (builder (композиционный конструктор обьекта)) | |
| * | |
| * Паттерн СТРОИТЕЛЬ - это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. | |
| * Строитель даёт возможность использовать один и тот же код строительства для получения разных представлений объектов. | |
| * Применение: Паттерн Строитель нужен, если объект может существовать в разных вариациях или процесс | |
| * инстанцирования состоит из нескольких шагов. | |
| * В этом случае есть три варианта: | |
| * - огромный конструктор(фабрика) со множеством if/else в котором легко запуться и который тяжело понять |
| /** | |
| * | |
| * ПАТТЕРН ЦЕПОЧКА ОБЯЗАННОСТЕЙ (Chain of responsibility) | |
| * | |
| * Паттерн ЦЕПОЧКА ОБЯЗАННОСТЕЙ - это поведенческий паттерн проектирования, который позволяет передавать запросы | |
| * последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам | |
| * и стоит ли передавать запрос дальше по цепи. | |
| * | |
| * Пример: у вас есть три счета (A, B, C) с разными суммами и разным приоритетом использования. Сначала проверяется A, | |
| * если на нем достаточно денег для покупки, то цепочка прерывается. Иначе проверяется B, затем C. Цепь будет |
| /** | |
| * | |
| * ПАТТЕРН ПРИСПОСОБЛЕНЕЦ/ЛЕГКОВЕС (Flyweight) | |
| * | |
| * Паттерн ПРИСПОСОБЛЕНЕЦ/ЛЕГКОВЕС - структурный шаблон проектирования, при котором объект, представляющий себя как | |
| * уникальный экземпляр в разных местах программы, по факту не является таковым. | |
| * Данный паттерн проектирования позволяет вместить большее количество объектов в отведённую оперативную память. | |
| * Легковес экономит память, разделяя общее состояние объектов между собой, вместо хранения одинаковых данных в | |
| * каждом объекте. |
| /** | |
| * | |
| * ПАТТЕРН ПОСРЕДНИК (mediator) | |
| * | |
| * Паттерн ПОСРЕДНИК (mediator) - это поведенческий паттерн проектирования, который позволяет уменьшить связанность | |
| * множества классов между собой, благодаря перемещению этих связей в один класс-посредник. | |
| * Паттерн Посредник используется для централизации сложных взаимодействий и управляющих операций между объектами. | |
| * Один из модулей медиатора изменяет состояние -> оповещает об этом медиатор -> медиатор оповещает об этом другие | |
| * модули, которым положено знать о случившемся. | |
| * Довольно популярна реализация Посредника при помощи Наблюдателя. При этом объект посредника будет выступать |
| /** | |
| * | |
| * ПАТТЕРН ХРАНИТЕЛЬ (memento) | |
| * | |
| * Паттерн ХРАНИТЕЛЬ (memento) - Паттерн Хранитель используется для реализации возврата к одному из предыдущих | |
| * состояний (например, если пользователь выполнил команду «Отменить»). | |
| * Хранитель – это объект, в котором сохраняется внутреннее состояния другого объекта – хозяина хранителя. Для работы | |
| * механизма отката нужно, чтобы хозяин предоставил хранитель, когда возникнет необходимость записать контрольную точку | |
| * состояния хозяина. Только хозяину разрешено помещать в хранитель информацию и извлекать ее оттуда, для других | |
| * объектов хранитель непрозрачен. |
| /** | |
| * | |
| * ПАТТЕРН ПОСЕТИТЕЛЬ (visitor) | |
| * | |
| * ПОСЕТИТЕЛЬ — используется для расширения возможностей комбинации объектов, т.е. паттерн Посетитель позволяет | |
| * добавлять объектам дополнительные операции, не изменяя их исходный код. | |
| * | |
| * Когда вам нужно выполнить какую-то операцию над всеми элементами сложной структуры объектов, например, деревом. | |
| * Посетитель позволяет применять одну и ту же операцию к объектам различных классов. ИЛИ когда новое поведение имеет | |
| * смысл только для некоторых классов из существующей иерархии. |