PHP – Mẫu thiết kế


Lý thuyết về mẫu thiết kế của Microsoft là, “Tài liệu giới thiệu các mẫu và sau đó trình bày chúng trong một kho lưu trữ hoặc danh mục, được tổ chức để giúp bạn xác định được sự kết hợp phù hợp của các mẫu giải quyết vấn đề của bạn”.

Ví dụ về các mẫu thiết kế

Singleton

Một Lớp có một thể hiện, Nó cung cấp một điểm truy cập toàn cục cho nó, Đoạn mã sau sẽ giải thích về khái niệm 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()); 
?>

Ví dụ trên được thực hiện dựa trên việc tạo phương thức tĩnh là getInstance ()

Nhà máy

Một lớp đơn giản Tạo đối tượng và bạn muốn sử dụng đối tượng đó, Ví dụ sau sẽ giải thích về mẫu thiết kế nhà máy.

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

Khó khăn chính với mô hình nhà máy là nó sẽ làm tăng độ phức tạp và nó không đáng tin cậy đối với các lập trình viên giỏi.

Mô hình chiến lược

Mẫu chiến lược tạo ra một thuật toán gia đình và đóng gói mỗi thuật toán. Ở đây, mỗi thuật toán nên có thể thay đổi lẫn nhau trong họ.

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

Kiểm soát chế độ xem mô hình

Chế độ xem hoạt động như GUI, Mô hình hoạt động như Back End và Điều khiển hoạt động như một bộ điều hợp. Ở đây ba phần được kết nối với nhau. Nó sẽ truyền dữ liệu và truy cập dữ liệu giữa nhau.

Kiểm soát chế độ xem mô hình