В этой статье описывается стратегия шаблона стратегии шаблона проектирования PHP. Для вашей справки приведем следующие сведения:
1. Обзор
В разработке программного обеспечения существует множество алгоритмов для реализации определенной функции Стратегия, мы можем выбрать различные алгоритмы или стратегии в соответствии с различными условиями или условиями для выполнения функции 。 Например, жесткое кодирование-это обычно используемый метод в классе. Если вам нужно предоставить различные алгоритмы поиска, вы можете записать эти алгоритмы в класс, предоставить несколько методов в этом классе, и каждый метод соответствует определенному алгоритму поиска. Конечно, вы можете инкапсулировать эти алгоритмы поиска в единый метод и использовать, если еще… Или дело. Мы можем назвать эти два метода жестким кодированием. Если нам нужно добавить новый алгоритм поиска, нам нужно изменить исходный код, который инкапсулирует класс алгоритма; чтобы заменить алгоритм поиска, нам также необходимо изменить код вызова клиента. В этом классе алгоритмов инкапсулировано большое количество алгоритмов поиска, Такой код будет более сложным и трудным в обслуживании. Если мы включим эти стратегии на стороне клиента, этот метод будет более нежелательным, что приведет к тому, что клиентская программа будет огромной и трудной в обслуживании. Если есть большое количество алгоритмов на выбор, проблема станет более серьезной 。
“1” или “1” можно использовать для определения того, может ли предпочтительное меню пользователя располагаться горизонтально или нет. Коллеги могут гибко добавлять стиль отображения меню.
Пример 2: Путешествия: у нас может быть несколько стратегий для рассмотрения: мы можем ездить на велосипедах, автомобилях, поездах, самолетах. Каждая политика может получить один и тот же результат, но они используют разные ресурсы. Выбор стратегии зависит от стоимости, времени, инструментов и удобства каждого метода.
2. Проблемы
Как отделить алгоритм от объекта, чтобы алгоритм можно было изменить независимо от клиента, который его использует?
3. Решения
Модель стратегии Определите серию алгоритмов, инкапсулируйте каждый алгоритм и сделайте их заменяемыми. Этот шаблон позволяет алгоритму изменяться независимо от клиента, который его использует. также известен как Политика 。 ((Определите семейство алгоритмов,инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют. )
Шаблон стратегии отличает сам объект от правил работы, и его функция очень мощна, потому что основная идея самого шаблона проектирования-это полиморфия объектно-ориентированного программирования.
4. Применимость
Используйте шаблон стратегии когда
1) Многие связанные классы просто ведут себя по-разному. Политика предоставляет способ настройки класса с одним из нескольких вариантов поведения. То есть системе необходимо динамически выбрать один из нескольких алгоритмов.
2) · необходимо использовать различные варианты алгоритма. Например, вы можете определить алгоритмы, которые отражают различные компромиссы между пространством и временем. Когда эти варианты реализованы как уровень класса алгоритма, можно использовать шаблон политики.
3) Алгоритм использует данные, которые клиенты не должны знать. Шаблоны политики можно использовать, чтобы избежать раскрытия сложных структур данных, связанных с алгоритмами.
4) Класс определяет несколько вариантов поведения, и эти варианты поведения отображаются в виде нескольких условных операторов в работе этого класса. Переместите соответствующие условные ветви в соответствующие классы стратегий, чтобы заменить эти условные операторы.
5. Структура
6. Состав модели
Контекст: Используйте объект ConcreteStrategy для настройки. Сохраняйте ссылку на объект стратегии. Вы можете определить интерфейс для стратегии для доступа к ее данным. Абстрактный класс стратегии: Определяет общий интерфейс для всех поддерживаемых алгоритмов. Контекст использует этот интерфейс для вызова конкретного алгоритма, определенного стратегией. Конкретный класс стратегии: Интерфейс стратегии используется для реализации определенного алгоритма.
7. Эффект
Стратегическая модель обладает следующими преимуществами:
1) Серия алгоритмов корреляции Уровень класса стратегии определяет серию повторно используемых алгоритмов или моделей поведения для контекста. Наследование помогает извлечь общие функции этих алгоритмов. 2) Предоставляет способ замены отношений наследования Наследование обеспечивает еще один способ поддержки нескольких алгоритмов или моделей поведения. Вы можете напрямую создать подкласс класса контекста, чтобы придать ему другое поведение. Однако это сделает поведение жестко привязанным к контексту и смешает реализацию алгоритма с реализацией контекста, что делает контекст трудным для понимания, трудным для поддержания и трудным для расширения, и не может динамически изменять алгоритм. В итоге вы получаете кучу связанных классов, и единственное различие между ними заключается в алгоритме или поведении, которые они используют. Инкапсуляция алгоритма в отдельный класс стратегий позволяет изменять его независимо от контекста, что облегчает переключение, понимание и расширение. 3) Некоторые условные операторы if else исключаются Шаблон стратегии предоставляет альтернативу использованию условных операторов для выбора желаемого поведения. Когда в классе складываются различные модели поведения, трудно избежать использования условных операторов для выбора подходящего поведения. Инкапсуляция поведения в отдельный класс стратегии устраняет эти условные операторы. Код со многими условными операторами обычно означает, что необходимо использовать шаблон стратегии. 4) Выбор реализации Шаблон стратегии может обеспечивать различные реализации одного и того же поведения. Клиенты могут выбирать из различных стратегий в соответствии с различными требованиями к соотношению времени и пространства.
Недостатки режима стратегии:
1) Клиент должен знать все классы политик и решить, какой из них использовать Потенциальный недостаток этой модели заключается в том, что если клиент хочет выбрать подходящую стратегию, он должен знать, чем эти стратегии отличаются. На этом этапе вам, возможно, придется сообщить заказчику о конкретных проблемах с реализацией. Поэтому шаблон стратегии необходим только тогда, когда эти различные варианты поведения связаны с поведением, связанным с клиентами. 2) затраты на связь между стратегией и контекстом Независимо от того, являются ли алгоритмы, реализуемые Конкретной стратегией, простыми или сложными, все они имеют общий интерфейс, определенный стратегией. Поэтому вполне вероятно, что некоторые конкретные стратегии не будут использовать всю информацию, передаваемую им через этот интерфейс; простые конкретные стратегии могут не использовать ни одну из них! Это означает, что иногда контекст создает и инициализирует параметры, которые никогда не будут использоваться. Если такая проблема существует, потребуется более тесная взаимосвязь между стратегией и контекстом. 3) шаблон стратегии приведет ко многим классам политик : вы можете в определенной степени уменьшить количество объектов, используя шаблон общего доступа. Количество объектов в стратегии увеличивается. Иногда вы можете уменьшить эти накладные расходы, реализовав стратегию как объект без состояния, который может использоваться контекстами совместно. Любое оставшееся состояние поддерживается контекстом. Контекст передает это состояние в каждом запросе объекту стратегии. Общие стратегии не должны поддерживать состояние между вызовами.
8. Реализация
1) Путешествия:
uml:
Реализация кода:
2) Стратегия сортировки: система предоставляет класс для управления данными массива, который инкапсулирует общие операции с массивами,
Например, поиск элементов массива, сортировка элементов массива и так далее. Взяв в качестве примера операцию сортировки, в этой статье класс операций с массивом разрабатывается с использованием шаблона политики,
Клиент может динамически изменять алгоритм сортировки и выбирать сортировку по пузырькам, выбирать сортировку или вставлять сортировку в соответствии с потребностями,
Он также может гибко добавлять новый алгоритм сортировки.
9. Другие связанные модели
1) Режим состояния
Шаблоны политики очень похожи на многие другие шаблоны проектирования. Самое большое различие между режимом политики и моделью состояния заключается в том, что режим политики выполняет условный выбор только один раз, в то время как режим состояния непрерывно изменяет режим выполнения с изменением параметров экземпляра (состояние экземпляра объекта). Другими словами, это просто закономерность
Режим выполнения изменяется при инициализации объекта, в то время как режим состояния динамически изменяет режим выполнения экземпляра объекта в соответствии со временем цикла экземпляра объекта.
– да Количество состояний, проходящих через класс среды Чтобы решить, использовать ли режим политики или режим состояния. • Класс среды режима политики выбирает конкретный класс политики, и конкретному классу политики не нужно заботиться о классе среды ; и Класс среды режима состояния необходимо перевести в определенное состояние из-за внешних факторов, чтобы реализовать переключение состояния с помощью своего метода , так что Существует двунаправленная связь между классом среды и классом состояния 。 При использовании режима стратегии, Клиент должен знать, какую конкретную политику выбрать При использовании режима состояния, Клиенту не нужно заботиться о конкретном состоянии Состояние класса среды будет автоматически преобразовано в соответствии с работой пользователя. Если объекты определенного класса в системе имеют несколько состояний, поведение в разных состояниях различно, и они Используют режим состояний, когда могут происходить переходы между состояниями ; Если в системе существует несколько реализаций определенного поведения класса, и Шаблоны политики используются, когда эти реализации взаимозаменяемы 。
2) Разница между простыми фабриками:
Фабричный шаблон-это шаблон создания, который фокусируется на создании объектов и предоставляет интерфейс для создания объектов. Шаблон политики-это шаблон поведения объекта, который фокусируется на инкапсуляции поведения и алгоритма. Он определяет серию алгоритмов, инкапсулирует каждый алгоритм и делает их заменяемыми. Алгоритм может быть изменен независимо от клиентов, которые его используют
Возьмем пример путешествия, упомянутого выше: Мы отправляемся в путешествие. Режим стратегии: у вас есть несколько вариантов путешествия, независимо от того, лучше ли путешествовать на поезде или на велосипеде. Составление плана путешествия полностью зависит от клиента (например, вам нужно самостоятельно купить билеты на поезд или авиабилеты). Заводской режим заключается в том, что после того, как вы решите, какой план поездки вы выберете, вам не нужно обращать внимание на то, как план поездки создается для вас. Другими словами, вы можете сказать мне название схемы, и тогда фабрика построит конкретную схему вместо вас (фабрика купит билет на поезд вместо вас).
В приведенном выше примере клиентский код:
$person = new PersonContext(new TrainStrategy()); $person->travel();
Мы видим, что клиентам необходимо самим создавать конкретные экземпляры путешествий (Новая стратегия движения поездов ()). Конкретный экземпляр передается дальше.
В заводском режиме вам просто нужно указать, какой вид путешествия вы хотите. Вместо передачи конкретного экземпляра вы можете использовать логотип (идентификатор схемы путешествия).
10. Резюме и анализ
1) Шаблон стратегии-это шаблон проектирования, который легко понять и использовать, Шаблон политики-это инкапсуляция алгоритма. Он отделяет ответственность алгоритма от самого алгоритма и делегирует ее другому управлению объектами Шаблон политики обычно инкапсулирует ряд алгоритмов в ряд классов политики в качестве подкласса абстрактного класса политики. Одним словом, “подготовьте набор алгоритмов и инкапсулируйте каждый алгоритм, чтобы их можно было менять местами”..
2) В режиме политики клиент сам решает, какую конкретную роль политики использовать при каких обстоятельствах. 2)
3) Шаблон политики только инкапсулирует алгоритм, обеспечивая удобство вставки нового алгоритма в существующую систему и удаления старого алгоритма из системы. Режим политики не определяет, какой алгоритм использовать, когда, и выбор алгоритма определяется клиентом. Это в определенной степени повышает гибкость системы, но клиенту необходимо понимать различия между всеми конкретными классами политик, чтобы выбрать соответствующий алгоритм. Это также является одним из недостатков режима политики, который в определенной степени увеличивает сложность использования клиента.
Подробнее о содержании, связанном с PHP заинтересованные читатели могут ознакомиться с этой темой сайта: “Вводный учебник по объектно-ориентированному программированию PHP”, “Навыки работы с массивом PHP (массивом)”, “Вводный курс по основному синтаксису PHP”, “Краткое описание операций и использования операторов PHP”, “Краткое описание использования символьной строки (строки) PHP”, “Учебник по введению в работу с базой данных PHP + MySQL” и “Общая работа с базой данных PHP”. Краткое изложение навыков письма
Я надеюсь, что эта статья поможет вам в программировании на PHP.