PHP - Padrões de Design
A Teoria do padrão de design da Microsoft é: "O documento apresenta padrões e, em seguida, os apresenta em um repositório, ou catálogo, que é organizado para ajudá-lo a localizar a combinação certa de padrões que resolva seu problema".
Exemplos de padrões de design
Singleton
Uma classe tem uma instância, ela fornece um ponto de acesso global para ela. O código a seguir explicará sobre o conceito 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());
?>
O exemplo acima implementado com base na criação de método estático é getInstance ()
Fábrica
Uma Classe Simples Cria o objeto e você deseja usar esse objeto. O exemplo a seguir explicará sobre o padrão de projeto 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());
?>
A principal dificuldade com o padrão de fábrica é que aumenta a complexidade e não é confiável para bons programadores.
Padrão de estratégia
O padrão de estratégia cria um algoritmo familiar e encapsula cada algoritmo. Aqui, cada algoritmo deve ser intercambiável dentro da família.
<?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);
?>
Controle de visualização de modelo
A visualização atua como GUI, o modelo atua como back end e o controle atua como um adaptador. Aqui, três partes estão interconectadas entre si. Ele vai passar os dados e acessar os dados entre si.