PHP - шаблоны проектирования

Теория шаблонов проектирования Microsoft: «Документ вводит шаблоны, а затем представляет их в репозитории или каталоге, который организован таким образом, чтобы помочь вам найти правильную комбинацию шаблонов, которая решает вашу проблему».

Примеры шаблонов проектирования

Синглтон

Класс имеет один экземпляр, он обеспечивает глобальную точку доступа к нему. Следующий код объяснит концепцию синглтона.

<?php
   class Singleton {
      public static function getInstance() {
         static $instance = null;
         
         if (null === $instance) {
            $instance = new static();
         }
         return $instance;
      }
      protected function __construct() {
      }
      
      private function __clone() {
      }
      
      private function __wakeup() {
      }
   }
   
   class SingletonChild extends Singleton {
   }
   
   $obj = Singleton::getInstance();
   var_dump($obj === Singleton::getInstance());
   
   $anotherObj = SingletonChild::getInstance();
   var_dump($anotherObj === Singleton::getInstance());
   var_dump($anotherObj === SingletonChild::getInstance()); 
?>

Вышеупомянутый пример, реализованный на основе создания статического метода, - getInstance ()

Завод

Класс Simple Создает объект, и вы хотите использовать этот объект. Следующий пример объяснит шаблон проектирования фабрики.

<?php
   class Automobile {
      private $bikeMake;
      private $bikeModel;
      
      public function __construct($make, $model) {
         $this->bikeMake = $make;
         $this->bikeModel = $model;
      }
      
      public function getMakeAndModel() {
         return $this->bikeMake . ' ' . $this->bikeModel;
      }
   }
   
   class AutomobileFactory {
      public static function create($make, $model) {
         return new Automobile($make, $model);
      }
   }
   
   $pulsar = AutomobileFactory::create('ktm', 'Pulsar');
   print_r($pulsar->getMakeAndModel());
   
   class Automobile {
      private $bikeMake;
      private $bikeModel;
      
      public function __construct($make, $model) {
         $this->bikeMake = $make;
         $this->bikeModel = $model;
      }
      
      public function getMakeAndModel() {
         return $this->bikeMake . ' ' . $this->bikeModel;
      }
   }
   
   class AutomobileFactory {
      public static function create($make, $model) {
         return new Automobile($make, $model);
      }
   }
   t$pulsar = AutomobileFactory::create('ktm', 'pulsar');
   
   print_r($pulsar->getMakeAndModel()); 
?>

Основная трудность с фабричным шаблоном состоит в том, что он увеличивает сложность и ненадежен для хороших программистов.

Шаблон стратегии

Шаблон стратегии составляет семейный алгоритм и инкапсулирует каждый алгоритм. Здесь каждый алгоритм должен быть взаимозаменяемым внутри семейства.

<?php
   $elements = array(
      array(
         'id' => 2,
         'date' => '2011-01-01',
      ),
      array(
         'id' => 1,
         'date' => '2011-02-01'
      )
   );
   
   $collection = new ObjectCollection($elements);
   
   $collection->setComparator(new IdComparator());
   $collection->sort();
   
   echo "Sorted by ID:\n";
   print_r($collection->elements);
   
   $collection->setComparator(new DateComparator());
   $collection->sort();
   
   echo "Sorted by date:\n";
   print_r($collection->elements);
?>

Управление представлением модели

Представление действует как графический интерфейс, модель действует как серверная часть, а элемент управления действует как адаптер. Здесь три части взаимосвязаны между собой. Он будет передавать данные и обращаться к ним друг с другом.