Паттерны ООП простыми словами: структурирующие паттерны
В этой статье рассмотрим структурирующие паттерны проектирования и попробуем на простых примерах разобраться как эти паттерны работают.
Структурирующие паттерны
Такие паттерны помогают внести порядок и научить разные объекты правильно работать друг с другом.
Adapter или wrapper (адаптер, обертка)
Полностью соответствует своему названию. Чтобы заставить работать советскую вилку через евророзетку требуется переходник, то есть «адаптер» – он служит промежуточным объектом между двумя другими, которые не могут работать напрямую друг с другом.
Bridge (мост)
Вам требуется работать на разных автомобилях, но садясь в новый автомобиль вы уже должны знать как им управлять. Здесь вы сталкиваетесь с паттерном «мост». С одной стороны, вы имеете множество различных автомобилей (разные модели и марки), но среди все этих машин есть общая абстракция (интерфейс) в виде руля, педалей, коробки передач и других рычагов.
То есть, нам известны правила изготовления автомобилей по которым мы можем создавать любые их виды, но за счет сохранения общих правил взаимодействия с ними, мы можем одинаково управлять каждым из них. «Мостом» в данном случае является пара двух «объектов»: конкретного автомобиля и правил взаимодействия как с этим, так и с любым другим автомобилем.
Composite (компоновщик)
Суть паттерна заключается в сокращении различий в управлении группами объектов и индивидуальными объектами. Рассмотрим управление солдатами в строю. Существует некий свод правил, который определяет как командовать строем, согласно этого свода не важно кому отдается приказ (например «шагом марш») – одному солдату или целому взводу. В такой свод правил нельзя включить команду, которую может исполнить только один солдат, но не может исполнить группа и наоборот.
Decorator (декоратор, оформитель)
Данный паттерн чаще всего используется для расширения исходного объекта до требуемого вида. Условно можно считать «декоратором» человека с кистью и красной краской. Какой бы объект или тип объектов мы не передали в руки «декоратору», на выходе мы будем получать красные объекты.
Facade (фасад)
Представьте, что управление автомобилем происходит следующим образом: нужно нажать одну кнопку чтобы подать питание с аккумулятора, другую чтобы подать питание на инжектор, третью чтобы включить генератор, четвертую чтобы зажечь лампочку на панели и так далее. Это было бы довольно сложно. Чтобы всего этого избежать, подобный набор действий заменяется простым и комплексным поворотом ключа зажигания. В данном случае поворот ключа зажигания и будет тем самым «фасадом».
Front controller (единая точка входа)
В данном примере, «единой входной точкой» можно считать ваш браузер. Он служит «единой точкой входа» для всего интернета. То есть, вы используете один интерфейс для получения доступа к разным объектам большой системы (сайтам в интернете).
Flyweight (приспособленец)
Представьте что нам требуется поставить пьесу. Но по сценарию в этой пьесе задействованы несколько десятков людей, которые выполняют одинаковые действия, например участвуют в массовках для различных сцен в разные промежутки времени, но между ними всё же есть какие-то различия, например, костюмы. Стоило бы огромных денег нанять для каждой роли отдельного актера, поэтому мы используем паттерн «приспособленец». Создадим все нужные костюмы, а для каждой массовки будем переодевать небольшую группу актеров в требуемые для этой сцены костюмы. В результате мы имеем возможность ценой малых ресурсов создавать видимость управления большим количеством разных объектов.
Proxy или surrogate (прокси, заместитель, суррогат)
Сотрудникам одного из подразделений фирмы регулярно требуется получать информацию о том, какого числа бухгалтерия планирует выплатить зарплату. С одной стороны, каждый из них может индивидуально и регулярно ездить в бухгалтерию для выяснения этого вопроса. С другой, при приближении планируемой даты подразделение может выбрать одного человека, который будет выяснять эту информацию у бухгалтерии, а в последствии уже все в подразделении могут выяснить эту информацию у него, что значительно быстрее. Именно этот человек и будет реализованным «прокси» – паттерном, который будет предоставлять специальный механизм доступа к информации из бухгалтерии.