This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН ДЕКОРАТОР (обертка) | |
* Позволяет наделить обьект новыми возможностями не меняя первоначальный класс и не создавая дочерние классы | |
* Принцип работы: декоратор помещает целевой обьект в обьект обертку, кот-й запускает базовое поведение обьекта, | |
* а затем добавляет/отнимает что-то свое. | |
* | |
*/ | |
class interface_Coffee { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ: | |
Паттерны предназначены для решения типичных задач, возникающих в ходе проектирования. Любой паттерн описывает задачу, которая снова и снова возникает в нашей работе, а также принцип ее решения, причем таким образом, что это решение можно потом использовать миллион раз, ничего не изобретая заново. | |
Все паттерны обеспечивают возможность изменения некоторой части системы независимо от других частей. | |
-- Паттерн — решение задачи в контексте. | |
Не самое понятное определение, вы не находите? Не беспокойтесь, мы разберем все его составляющие — все эти контексты, задачи и решения: | |
- Контекстом называется ситуация, в которой применяется паттерн. Ситуация должна быть достаточно типичной и распространенной. | |
- Задачей называется цель, которой вы хотите добиться в контексте, в совокупности со всеми ограничениями, присущими контексту. | |
- Решением называется обобщенная архитектура, которая достигает заданной цели при соблюдении набора ограничений. Решение должно быть возможно применять снова |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН АДАПТЕР | |
* | |
Обеспечивает совместимость классов с разными интерфейсами, т.е. выполняет роль переводчика. | |
В итоге клиент (тот кто вызывает методы) через адаптер может работать с разными классами с разными интерфейсами, даже не подозревая об этом, | |
хотя умеет пользоваться только одним интерфейсом. | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН ФАСАД | |
* | |
Предоставляет унифицированный интерфейс к группе интерфейсов подсистемы. Фасад определяет высокоуровневый интерфейс, упрощающий работу с подсистемой. | |
Превращает сложный интерфейс с множеством методов в простой интерфейс с минимум методов. | |
В данном случае интерфейс фасада компьюетра будет иметь всего 2 метода - вкл/выкл, при том что под капотом выполняется | |
12 методов. | |
Таким образом отделяется код клиента от кода реализации. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН ШАБЛОННЫЙ МЕТОД | |
* | |
Задает «скелет» алгоритма в методе, оставляя определение реализации некоторых шагов субклассам. | |
Субклассы могут переопределять некоторые части алгоритма без изменения его структуры. | |
Методы внутри шаблонного метода могут быть пустыми, выдавать ошибку если не описаны в субклассе или иметь реализацию по умолчанию. | |
Применение: | |
1. Когда подклассы должны расширять базовый алгоритм, не меняя его структуры. | |
2. Когда у вас есть несколько классов, делающих одно и то же с незначительными отличиями. Если вы редактируете один |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН ИТЕРАТОР | |
* | |
Iterator — поведенческий шаблон проектирования. Представляет собой объект, позволяющий получить последовательный | |
доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов. | |
Например, такие элементы как дерево, связанный список, хеш-таблица и массив могут быть пролистаны (и модифицированы) | |
с помощью объекта Итератор. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН КОМПОНОВЩИК (composite) | |
* | |
* Шаблон Компоновщик позволяет единообразно обрабатывать отдельные объекты и их группы. Он работает с иерархией «часть-целое». | |
* Паттерн Компоновщик позволяет создавать древовидные структуры, узлами которых являются как комбинации, так и | |
* отдельные объекты. | |
* ВАЖНО: в такой структуре одни и те же операции могут применяться и к комбинациям, и к отдельным объектам. | |
* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН СОСТОЯНИЕ (state) | |
* | |
* Паттерн Состояние управляет изменением поведения объекта при изменении его внутреннего состояния. | |
* Внешне это выглядит так, словно объект меняет свой класс. | |
* | |
* Основная идея в том, что программа может находиться в одном из нескольких состояний, которые всё время сменяют друг | |
* друга. Набор этих состояний, а также переходов между ними, предопределён и конечен. Находясь в разных состояниях, | |
* программа может по-разному реагировать на одни и те же события, которые происходят с ней. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН ЗАМЕСТИТЕЛЬ (proxy) | |
* Предоставляет суррогатный объект, управляющий доступом к другому объекту. | |
* | |
* Заместитель это обертка, которая применяется в следующих случаях: | |
* 1. Ленивая инициализация (виртуальный прокси). Когда у вас есть тяжёлый объект, | |
* грузящий данные из файловой системы или базы данных. | |
* 2. Защита доступа (защищающий прокси). Когда в программе есть разные типы пользователей, и вам хочется | |
* защищать объект от неавторизованного доступа. Прокси может проверять доступ при каждом вызове и передавать |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН МОСТ (bridge) | |
* | |
* Паттерн МОСТ - отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и | |
* другое. Это структурный паттерн проектирования, который разделяет один или несколько классов на две отдельные | |
* иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга. | |
* Например у нас есть класс Круг, и мы хотим создавать круги разного цвета, для этого нужно будет создать подклассы | |
* Синий Круг, Желтый круг и т.д. А если потом появятся квадраты и треугольники, то для них тоже нужно будет создавать | |
* большое количество подклассов. В итоге иерархия будет огромной. Логичнее создать две независимых иерархии - |