PHP

PHP - паттерн "Стратегия (Strategy)"

PHP - паттерн "Стратегия (Strategy)"
В этой статье я расскажу про php - шаблон проектирования "Стратегия" и в каком контексте применил его я.

Все мы знаем, что верстка сайта, т.е. его front -часть, должна быть не только кроссбраузерной, но еще и адаптивной. То есть в зависимости от типа ОС и клиента, нам часто нужно совершать какие-то определенные действия: подключать дополнительный стили и скрипты или же редиректить на заглушку. В парадигме ООП я для решения данной задачи я решил использовать паттерн "Стратегия".

Стратегия, Strategy — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.

Применяется в одном и том же случае, в зависимости от текущего состояния системы или её окружения, используются различные алгоритмы.

Что было нужно мне. В зависимости от типа клиента (браузера и операционной системы) совершать какие-то определенные действия, в частности, если в качестве браузера используется IE7 и ниже, редиректить на заглушку. Далее, при реализации адаптивной верстки, скорее всего понадобится подключать какие-нибудь дополнительные плагины и т.д., если же существует приложение для Андроид или Айфон, давать ссылку на скачивание этого приложения. Ну мало ли чего еще в будущем понадобится!

А теперь небольшой высер пример кода с описанием из котрого все станет ясным:

<?php
abstract class AppNamingStrategy {
    abstract public function make();
}
 
class  OldIe extends AppNamingStrategy {
    public function make() {
        if ($conf_redirect== true) {       
         // редирект на страницу с заглушкой 
        }
    }
}
 
class  Android extends AppNamingStrategy {
    public function make() {   
        // подключение доп файлов css
    }
}
 
class  AppStrategy {
 
    public function __construct() {
        // лучше передавать как параметр
        $app = App::get_all();
        
        if ($app->browser == 'ie7') {
                $obj = new  OldIe();
                $obj->make();
        }
        if($app->os == 'adnroid'){
	  $obj = new  Android();
                $obj->make();
       }
    }
 
}
?>
Теги:
паттерн, Стратегия, Strategy
Добавлено: 03 Апреля 2018 19:05:46 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...