Seguindo os conceitos do texto encontrado no site OODesing.com.br, onde há exemplos da aplicação do padrão (design pattern) criacional Builder nas linguagens C#, Delphi, Java e C++, resolvi criar também um demonstração em PHP, de acordo com o suporte OO do PHP5.
Para quem deseja conhecer a teoria e exemplos do padrão aqui fora citado, e entre outros ou até saber o que vem a ser design pattern, segue o link abaixo:
http://www.oodesign.com.br/patterns/
Seguindo o exemplo dado na linguagem C#. (C Sharp)
http://www.oodesign.com.br/patterns/Builder_Real.cs.html
No PHP5 ficaria da seguinte forma. (De acordo com o suporte)
<?php
# @ Autor: Felipe Nascimento Silva Pena (ecl) $
# @ E-mail: felipensp @ gmail . com $
class Fabrica
{
public function Construir ( $oVeiculo )
{
$oVeiculo->Iniciar();
$oVeiculo->construirPortas();
$oVeiculo->construirMotor();
$oVeiculo->construirPneus();
}
}
abstract class ConstrutorVeiculo
{
protected $Veiculo;
abstract public function Iniciar();
abstract public function construirMotor();
abstract public function construirPortas();
abstract public function construirPneus();
}
class Carro extends ConstrutorVeiculo
{
public $Veiculo;
public function Iniciar ( )
{
$this->Veiculo = new Veiculo('Carro');
}
public function construirPortas ( )
{
$this->Veiculo->aPartes['Portas'] = 4;
}
public function construirMotor ( )
{
$this->Veiculo->aPartes['Motor'] = 1;
}
public function construirPneus ( )
{
$this->Veiculo->aPartes['Pneus'] = 4;
}
}
class Moto extends ConstrutorVeiculo
{
public $Veiculo;
public function Iniciar ( )
{
$this->Veiculo = new Veiculo('Moto');
}
public function construirPortas ( )
{
$this->Veiculo->aPartes['Portas'] = 0;
}
public function construirMotor ( )
{
$this->Veiculo->aPartes['Motor'] = 1;
}
public function construirPneus ( )
{
$this->Veiculo->aPartes['Pneus'] = 2;
}
}
class Veiculo
{
private $sTipo = NULL;
public
$aPartes =
array();
public function __construct ( $sTipo )
{
$this->sTipo = $sTipo;
}
public function ObterInformacoes ( )
{
printf("--------------------------\n");
printf("Veículo: %s \n",
$this->
sTipo);
printf("Motor: %s \n",
$this->
aPartes['Motor']);
printf("Portas: %s \n",
$this->
aPartes['Portas']);
printf("Pneus: %s \n",
$this->
aPartes['Pneus']);
}
}
$Fabrica = new Fabrica;
$Carro = new Carro;
$Moto = new Moto;
$Fabrica->Construir($Carro);
$Carro->Veiculo->ObterInformacoes();
$Fabrica->Construir($Moto);
$Moto->Veiculo->ObterInformacoes();
?>
A saída seria a seguinte:
--------------------------
Veículo: Carro
Motor: 1
Portas: 4
Pneus: 4
--------------------------
Veículo: Moto
Motor: 1
Portas: 0
Pneus: 2