- Este padrão permite a criação de famílias de objetos relacionados ou dependentes por meio de uma única interface e sem que a classe concreta seja especificada.
- Uma fábrica é a localização de uma classe concreta no código em que objetos são construídos .
- O objetivo em empregar o padrão é isolar a criação de objetos de seu uso e criar famílias de objetos relacionados sem ter que depender de suas classes concretas.
- Isto permite novos tipos derivados de ser introduzidas sem qualquer alteração ao código que usa a classe base .
- O uso deste padrão torna possível trocar implementações concretas sem alterar o código que estas usam, mesmo em tempo de execução.
- No entanto, o emprego deste padrão, como acontece com outros padrões semelhantes, pode resultar em uma complexidade desnecessária e trabalho extra no início do código.
- Além disso, os níveis mais elevados de abstração podem resultar em sistemas que são mais difíceis de manter.
- A essência do padrão Abstract Factory é fornecer uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
<?php
abstract class Video {
abstract public function render();
}
abstract class AbstractFactory {
abstract public function createPlayer($url);
}
class HtmlFactory extends AbstractFactory {
public function createPlayer($url){
return new htmlPlayer($url);
}
}
class htmlPlayer extends Video {
private $url;
public function __construct($url){
$this->url = $url;
}
public function render(){
echo '<video>'.$this->url.<'</video>';
}
}
class FlashFactory extends AbstractFactory {
public function createPlayer($url){
return new flashPlayer($url);
}
}
class flashPlayer extends Video {
private $url;
public function __construct($url){
$this->url = $url;
}
public function render(){
echo '<object>'.$this->url.'</object>';
}
}
$fac = new HtmlFactory();
$fac = new FlashFactory();
$player = $fac->createPlayer('123');
$player->render();