В этой статье описывается шаблон проектирования PHP: режим моста. Для вашей справки приведем следующие сведения:
1. Обзор
В программной системе некоторые типы имеют два или более размерных изменения из-за их собственной логики. Как бороться с такими “многомерными изменениями”? Как использовать объектно-ориентированную технологию, чтобы тип легко менялся в нескольких направлениях без дополнительной сложности?
Пример 1 Если мы хотим нарисовать прямоугольник, круг, эллипс и квадрат, нам нужно по крайней мере четыре класса фигур. Однако, если для рисования требуются разные цвета, такие как красный, зеленый и синий, существует, по крайней мере, две схемы дизайна, следующие:
Первый дизайн состоит в том, чтобы предоставить набор цветовых вариантов для каждой формы. Второй дизайн заключается в сочетании форм и цветов в соответствии с реальными потребностями.
Вариант 1 :
Вариант 2 :
Для системы с двумя измерениями изменений (т. е. причинами двух изменений) для проектирования системы используется вторая схема. Количество классов в системе меньше, и расширение системы более удобно. Вторая конструкция-это применение режима наведения мостов. Шаблон соединения преобразует отношения наследования в отношения ассоциации, что уменьшает связь между классами и уменьшает объем написания кода.
Пример 2 Примерами мостового соединения являются обычный выключатель, управляемый светом, вентилятор и т. Д. Назначение переключателя – включать или выключать устройство. Фактическим переключателем может быть простой переключатель на молнии с двойным ножом или переключатель диммера.
2. Проблемы
Как бороться с этим “многомерным изменением”? Как использовать объектно-ориентированную технологию, чтобы тип легко менялся в нескольких направлениях без дополнительной сложности?
3. Решения
Режим соединения : отделите абстрактную часть от части реализации, чтобы их можно было изменять независимо. Это структурный шаблон, также известный как шаблон ручки и корпуса или шаблон интерфейса. Когда абстракция может иметь несколько реализаций, для их координации часто используется наследование. Интерфейс определения абстрактного класса к абстрактному. Конкретные подклассы реализуются по-разному, но этот метод не является гибким. Механизм наследования фиксирует абстрактную часть с его частью видения, что затрудняет независимое изменение, расширение и использование абстрактной части и части реализации.
Чтобы понять связующие шаблоны, важно понять, как отделить абстракцию и реализацию, чтобы их можно было изменять независимо.
Аннотация: абстракция состоит в том, чтобы игнорировать некоторую информацию и рассматривать разные сущности как одно и то же. В объектно-ориентированном процессе извлечения общих свойств объектов для формирования классов является процессом абстракции. Реализация более абстрактна, чем материализация. Развязка: развязка заключается в том, чтобы разорвать связь между абстракцией и реализацией или изменить сильную связь между ними на слабую связь и изменить отношения наследования между двумя ролями на отношения ассоциации. Так называемая развязка в схеме наведения мостов относится к использованию ассоциативных отношений (отношений композиции или агрегации), а не отношений наследования между абстракцией и реализацией программной системы, так что они могут изменяться относительно независимо. Это намерение состоит в том, чтобы преодолеть шаблон.
4. Применимость
1) Вы не хотите иметь фиксированную связь привязки между абстракцией и ее частью реализации. Например, часть реализации должна быть доступна для выбора или переключения во время выполнения программы.
2) Абстракция класса и его образ могут быть расширены путем создания подклассов. В этом случае режим моста позволяет получить доступ к различным абстрактным интерфейсам
И часть реализации, и расширить их.
3) Модификация абстрактной части реализации не должна оказывать влияния на заказчика, то есть код заказчика не нужно перекомпилировать.
4) Вы хотите полностью скрыть абстрактную реализацию от клиента.
5) Вы хотите разделить реализацию между несколькими реализациями, но в то же время попросите клиента не знать об этом.
5. Структура
6. Состав режима строительства
Абстрактный класс: Определите интерфейс абстрактного класса и сохраните указатель на объект типа реализации
Усовершенствованная абстракция: Расширение интерфейса, определяемого абстракцией
Интерфейс класса реализации: Определите интерфейс класса реализации, который не обязательно должен быть точно таким же, как интерфейс абстракции; на самом деле два интерфейса могут быть совершенно разными. Вообще говоря, интерфейс разработчика обеспечивает только базовые операции, в то время как абстракция определяет операции более высокого уровня на основе этих базовых операций.
Конкретный класс реализации (конкретный исполнитель) Реализуйте интерфейс исполнителя и определите его конкретную реализацию.
7. Эффект
Режим моста имеет следующие преимущества:
1) Интерфейс разделения и его реализация Реализация не всегда может быть привязана к интерфейсу. Реализация абстрактных классов может быть настроена во время выполнения, и объект может даже изменить свою реализацию во время выполнения. Отделение абстракции от разработчика помогает уменьшить зависимость от времени компиляции части реализации. При изменении класса реализации нет необходимости перекомпилировать класс абстракции и его клиентскую программу. Чтобы обеспечить двоичную совместимость между различными версиями библиотеки классов, она должна обладать этим свойством. Кроме того, разделение интерфейса и реализации способствует многоуровневости, что приводит к лучшей структурированности системы. Высокоуровневая часть системы должна знать только абстракцию и реализована. 2) Повышение масштабируемости Вы можете расширить иерархии абстракции и исполнителей независимо друг от друга. 3) сделайте детали прозрачными для клиентов Вы можете скрыть детали реализации от
Режим наведения мостов
Введение режима наведения мостов увеличит сложность понимания и проектирования системы. Поскольку отношение агрегации основано на абстрактном уровне, разработчики должны разрабатывать и программировать абстракции. Режим моста требует правильной идентификации двух независимых переменных размеров в системе, поэтому область его использования имеет определенные ограничения.
8. Реализация
Имитационная кисть:
Теперь нам нужно предоставить три типа кистей, большие, средние и маленькие, которые могут рисовать пятью различными цветами. Если мы используем цветные карандаши, нам нужно подготовить 3 * цветных карандаша, то есть мы должны подготовить 15 конкретных цветных карандашей. Если вы используете кисть, вам нужно всего 3 типа кистей, плюс 5 коробок с красками, и используйте 3 + класса для достижения функции 15 цветных карандашей.
На самом деле, одно из ключевых различий между карандашом и кистью заключается в том, можно ли разделить перо и цвет. Он отделяет абстракцию от реализации, чтобы их можно было изменять независимо. Ключ – это развязка. Цвет мелка неотделим от самого мелка, поэтому для рисования необходимо использовать 15 мелков разных цветов и размеров. Кисть и пигмент могут быть отделены и изменены независимо друг от друга, что упрощает операцию. Здесь концепция абстрактного уровня такова: “кисть окрашена пигментом”. Когда это реализовано, существует 5 видов кистей, таких как красная, зеленая, синяя, черно-белая и т.д., Поэтому может быть 3 × 5 комбинаций. Каждый участник (кисть и краска) может свободно изменять свои собственные степени свободы.
Поскольку карандаш не может разделить перо и цвет, две степени свободы пера и цвета не могут быть изменены отдельно, поэтому для выполнения задачи можно создать только 15 видов объектов.
Шаблон моста преобразует отношение наследования в отношение композиции, что уменьшает связь между системами и уменьшает объем написания кода.
UML показан следующим образом:
Реализация кода:
Кросс-платформенный видеоплеер: изменения в двух измерениях, платформе и видеофайлах в разных форматах:
9. Режим наведения мостов и другие связанные с ним режимы
1) Абстрактные фабричные Шаблоны могут использоваться для создания и настройки определенного шаблона моста.
2) Режим адаптера Он используется для того, чтобы помочь несвязанным классам работать вместе. Обычно он используется после разработки системы. Однако шаблон моста используется в начале системы, что позволяет изменять абстрактный интерфейс и часть реализации независимо.
3) Разница между режимом наведения мостов и оформлением:
Режим украшения:
В какой-то степени эти два шаблона призваны уменьшить количество подклассов и избежать сложных отношений наследования. Однако их решения различны. Шаблоны оформления помещают дополнительные части подклассов, чем части базовых классов, в отдельные классы для удовлетворения потребностей новых функций. Когда мы инкапсулируем классы, описывающие новые функции, в объекты базовых классов, мы можем получить необходимые нам объекты подкласса. Эти классы, описывающие новые функции, могут реализовывать множество комбинаций функций с помощью комбинации
Режим наведения мостов:
Режим моста абстрагирует детали реализации исходного базового класса, преобразует его в структуру реализации, а затем преобразует исходный базовый класс в абстрактную иерархическую структуру, чтобы реализовать независимое изменение системы в нескольких измерениях.
10. Краткое изложение
Шаблон моста – очень полезный шаблон, а также очень сложный. Это соответствует принципу открытого закрытия и объектно-ориентированному принципу приоритета, а не наследования.
Подробнее о содержании, связанном с PHP заинтересованные читатели могут ознакомиться с этой темой сайта: “Вводный учебник по объектно-ориентированному программированию PHP”, “Навыки работы с массивом PHP (массив)”, “Вводный курс по основному синтаксису PHP”, “Краткое описание операций PHP и использования операторов”, “Краткое описание использования символьной строки (строки) PHP”, “Руководство по вводу в работу с базой данных PHP + MySQL” и “Общая работа с базой данных PHP” Краткое описание навыков написания
Я надеюсь, что эта статья поможет вам в программировании на PHP.