PHP - Patrones de diseño

La Teoría de patrones de diseño de Microsoft es: "El documento presenta patrones y luego los presenta en un repositorio o catálogo, que está organizado para ayudarlo a localizar la combinación correcta de patrones que resuelve su problema".

Ejemplos de patrones de diseño

único

Una clase tiene una instancia, le proporciona un punto de acceso global, el siguiente código explicará el concepto de singleton.

<?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()); 
?>

El ejemplo anterior implementado basado en la creación de métodos estáticos es getInstance ()

Fábrica

Una clase simple crea el objeto y desea utilizar ese objeto. El siguiente ejemplo explicará el patrón de diseño de fábrica.

<?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()); 
?>

La principal dificultad con el patrón de fábrica es que aumentará la complejidad y no es confiable para los buenos programadores.

Patrón de estrategia

El patrón de estrategia crea un algoritmo familiar y encapsula cada algoritmo. Aquí, cada algoritmo debería ser intercambiable dentro de la familia.

<?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);
?>

Control de vista de modelo

La vista actúa como GUI, el modelo actúa como back-end y el control actúa como un adaptador. Aquí tres partes están interconectadas entre sí. Pasará los datos y accederá a los datos entre ellos.