Шаблоны проектирования — реализация на языке PHP 8.0+

bc76e953e5d0d6dc1baeed8b50f9f494
Шаблон проектированияОписание 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Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной).

© Habrahabr.ru