PHP - wzorce projektowe
Teoria wzorców projektowych firmy Microsoft brzmi: „Dokument wprowadza wzorce, a następnie przedstawia je w repozytorium lub katalogu zorganizowanym tak, aby pomóc Ci znaleźć właściwą kombinację wzorców, która rozwiązuje Twój problem”.
Przykłady wzorców projektowych
Singel
Klasa ma jedną instancję, zapewnia globalny punkt dostępu do niej, Poniższy kod objaśnia koncepcję singletona.
<?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());
?>
Powyższy przykład zaimplementowany w oparciu o statyczne tworzenie metody to getInstance ()
Fabryka
Klasa prosta Tworzy obiekt i chcesz go użyć. Poniższy przykład objaśnia wzorzec projektowania fabryki.
<?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());
?>
Główną trudnością związaną z wzorcem fabrycznym jest to, że zwiększy złożoność i nie jest wiarygodny dla dobrych programistów.
Wzór strategii
Wzorzec strategii tworzy algorytm rodziny i hermetyzuje każdy algorytm. Tutaj każdy algorytm powinien być wymienny w rodzinie.
<?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);
?>
Kontrola widoku modelu
Widok działa jako graficzny interfejs użytkownika, model działa jako zaplecze, a sterowanie działa jako adapter. Tutaj trzy części są ze sobą połączone. Będzie przekazywać dane i uzyskiwać do nich dostęp między sobą.