В PHP 8.0 добавлен класс mixed. Тип mixed принимает любое значение. Он эквивалентен объединённому типу object|resource|array|string|float|int|bool|null. Доступно, начиная с PHP 8.0.0.
mixed — это, говоря языком теории типов, высший тип. Это означает, что все остальные типы являются его подтипами.
Шаблоны проектирования в ООП делятся на 4 принципиально разных подтипа:
-
Основные шаблоны (Fundamental)
-
Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.
-
Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.
-
Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.
Реализация классов шаблоны проектирования также производится с использованием общего абстрактного класса проектирования Принципы объектно-ориентированного программирования, реализованного по паттерну 4.7. Нулевой пациент.
|
Шаблон проектирования |
Описание |
|
0) Принципы объектно-ориентированного программирования |
Реализуются базовые принципы абстракции, инкапсуляции, наследования и полиморфизма |
|
1) Основные шаблоны (Fundamental) |
|
|
1.1. Шаблон делегирования Delegation pattern |
Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту. |
|
1.2. Шаблон функционального дизайна Functional design |
Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы. |
|
1.3. Неизменяемый интерфейс Immutable interface |
Создание неизменяемого объекта. |
|
1.4. Интерфейс Interface |
Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять. |
|
1.5. Интерфейс-маркер Marker interface |
В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутствие реализации интерфейса-маркера. В современных языках программирования вместо этого могут применяться атрибуты или аннотации. |
|
1.6. Контейнер свойств Property container |
Позволяет добавлять дополнительные свойства для класса в контейнер (внутри класса), вместо расширения класса новыми свойствами. |
|
1.7. Канал событий Event channel |
Расширяет шаблон «издатель — подписчик», создавая централизованный канал для событий. Использует объект-представитель для подписки и объект-представитель для публикации события в канале. Представитель существует отдельно от реального издателя или подписчика. Подписчик может получать опубликованные события от более чем одного объекта, даже если он зарегистрирован только на одном канале. |
|
2) Порождающие шаблоны (Creational) |
Шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту. |
|
2.1. Абстрактная фабрика Abstract factory |
Класс, который представляет собой интерфейс для создания компонентов системы. |
|
2.2. Строитель Builder |
Класс, который представляет собой интерфейс для создания сложного объекта. |
|
2.3. Фабричный метод Factory method |
Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. |
|
2.4. Отложенная инициализация Lazy initialization |
Объект, инициализируемый во время первого обращения к нему. |
|
2.5. Мультитон Multiton |
Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним. |
|
2.6. Объектный пул Object pool |
Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов. |
|
2.7. Прототип Prototype |
Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор. |
|
2.8. Получение ресурса есть инициализация Resource acquisition is initialization (RAII) |
Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта. |
|
2.9. Одиночка Singleton |
Класс, который может иметь только один экземпляр. |
|
3) Структурные шаблоны (Structural) |
Определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу. |
|
3.1. Адаптер Adapter / Wrapper |
Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс. |
|
3.2. Мост Bridge |
Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо. |
|
3.3. Компоновщик Composite |
Объект, который объединяет в себе объекты, подобные ему самому. |
|
3.4. Декоратор Decorator |
Класс, расширяющий функциональность другого класса без использования наследования. |
|
3.5. Фасад Facade |
Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое. |
|
3.6. Единая точка входа Front controller |
Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы. |
|
3.7. Приспособленец Flyweight |
Это объект, представляющий себя как уникальный экземпляр в разных местах программы, но фактически не являющийся таковым. |
|
3.8. Заместитель Proxy |
Объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него. |
|
4) Поведенческие шаблоны (Behavioral) |
Определяют взаимодействие между объектами, увеличивая таким образом его гибкость. |
|
4.1. Цепочка обязанностей Chain of responsibility |
Предназначен для организации в системе уровней ответственности. |
|
4.2. Команда, Action, Transaction Command |
Представляет действие. Объект команды заключает в себе само действие и его параметры. |
|
4.3. Интерпретатор Interpreter |
Решает часто встречающуюся, но подверженную изменениям, задачу. |
|
4.4. Итератор, Cursor Iterator |
Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации. |
|
4.5. Посредник Mediator |
Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга. |
|
4.6. Хранитель Memento |
Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях. |
|
4.7. Нулевой пациент Null Object |
Предотвращает нулевые указатели, предоставляя объект «по умолчанию». |
|
4.8. Наблюдатель Observer |
Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии. |
|
4.9. Слуга Servant |
Используется для обеспечения общей функциональности группе классов. |
|
4.10. Спецификация Specification |
Служит для связывания бизнес-логики. |
|
4.11. Состояние State |
Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния. |
|
4.12. Стратегия Strategy |
Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. |
|
4.13. Шаблонный метод Template method |
Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом. |
|
4.14. Посетитель Visitor |
Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы. |
|
4.15. Простая политика Simple Policy |
Описывает операцию проверки прав доступа. |
|
4.16. Издатель — подписчик Event listener |
Описывает процесс передачи сообщений, в котором отправители сообщений, именуемые издателями (англ. publishers), напрямую не привязаны программным кодом отправки сообщений к подписчикам (англ. subscribers). Вместо этого сообщения делятся на классы и не содержат сведений о своих подписчиках, если таковые есть. Аналогичным образом подписчики имеют дело с одним или несколькими классами сообщений, абстрагируясь от конкретных издателей. |
|
4.17. Одноразовый посетитель Single-serving visitor |
Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется. |
|
4.18. Иерархический посетитель Hierarchical visitor |
Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной). |
Реализация некоторых шаблонов проектирования на php 8.0+ https://github.com/RefactoringGuru/design-patterns-php/tree/main/src/RefactoringGuru
ссылка на оригинал статьи https://habr.com/ru/articles/780368/
Добавить комментарий