Шаблон проектирования "Стратегия"(Pattern Strategy).
 
			Продолжаем говорить про паттерны проектирования и сегодня мы рассмотрим шаблон проектирования "стратегия"(pattern strategy).
Суть данного шаблона проста - в зависимости от каких-то условий выбрать нужную тактику. Лучше рассмотреть на практике.
<?php
  abstract class FileNamingStrategy {
   abstract function createLinkName($fileName);
  }
  class ZipFile extends FileNamingStrategy {
   function createLinkName($fileName) {
    return "http://localhost/download/$fileName.zip";
   }
  }
  class TarGzFile extends FileNamingStrategy {
   function createLinkName($fileName) {
    return "http://localhost/download/$fileName.tar.gz";
   }
  }
  class FileStrategy {
   protected $_type;
   function __construct() {
    if(strstr($_SERVER["HTTP_USER_AGENT"], "Win"))
     $this->_type = new ZipFile();
    else
     $this->_type = new TarGzFile();
   }
   public function getLink($name) {
    return $this->_type->createLinkName($name);
   }	
  }
  $obj = new FileStrategy();
  $link1 = $obj->getLink("file_one");
  $link2 = $obj->getLink("file_two");
  print <<<LIST
  <h1>Список файлов для скачивания:</h1>
  <p>
  <a href="$link1">Первый файл</a>
  <a href="$link2">Второй файл</a>
  </p>
  LIST;
?>
Итак, у нас есть 2 класса: ZipFile и TarGzFile. Первый возвращает нам ссылку на скачивание файла в .zip формате, а второй в .tar.gz формате. В классе FileStrategy, в конструкторе, мы проверяем заголовок USER_AGENT и, если там присутствуют буквы Win, то создаём объект класса ZipFile, иначе же создаём объект класса TarGzFile. Потом мы создаём объект FileStrategy и вызываем метод getLink, который вернёт нам наш файл в нужном формате. Т.е. суть его в том, что мы не знаем, какой объект у нас будет, за нас это проверяет наш класс и возвращает нужный.
Итак, сегодня мы разобрали ещё один очень часто используемый шаблон проектирования "стратегия".
- 
					Создано 29.04.2014 20:06:08  
- 
					 Михаил Русаков Михаил Русаков
 
			 
			 
		 
				 
			 
				 
				 
				 
				
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.