PHP - Modèles de conception

La théorie des modèles de conception de Microsoft est la suivante: «Le document présente des modèles et les présente ensuite dans un référentiel, ou catalogue, organisé pour vous aider à trouver la bonne combinaison de modèles qui résout votre problème».

Exemples de modèles de conception

Singleton

Une classe a une instance, elle lui fournit un point d'accès global, le code suivant expliquera le concept 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()); 
?>

Ci-dessus L'exemple implémenté basé sur la création de méthode statique est getInstance ()

Usine

Une classe simple crée l'objet et vous souhaitez utiliser cet objet. L'exemple suivant explique le modèle de conception d'usine.

<?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 principale difficulté avec le modèle d'usine est qu'il augmentera la complexité et qu'il n'est pas fiable pour les bons programmeurs.

Modèle de stratégie

Le modèle de stratégie crée un algorithme de famille et encapsule chaque algorithme. Ici, chaque algorithme doit être interchangeable au sein de la famille.

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

Contrôle de la vue du modèle

La vue agit comme une interface graphique, le modèle agit comme un back-end et le contrôle agit comme un adaptateur. Ici, trois parties sont interconnectées les unes avec les autres. Il transmettra les données et accédera aux données entre eux.