Skip to content

Instantly share code, notes, and snippets.

@AlexGalhardo
Created August 20, 2019 17:32
Show Gist options
  • Select an option

  • Save AlexGalhardo/46da85e39301f8ca6e67e109d1a89ecf to your computer and use it in GitHub Desktop.

Select an option

Save AlexGalhardo/46da85e39301f8ca6e67e109d1a89ecf to your computer and use it in GitHub Desktop.
  • 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();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment