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 vị trí 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 từng 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.