|
Factory Method (PHP5)
por Felipe Lunardi Farias
Este é um tipo bem comum de padrão utilizado nos programas orientados
ao objeto. O padrão Factory Method é caracterizado por retornar uma
instância dentre muitas possíveis classes, dependendo dos dados
providos a ele.
Quem programa em JAVA já deve ter se deparado com esse método.
Vamos considerar um caso simples onde nós podemos usar uma classe
Factory. Suponha que nós temos um sistema de consulta de preços de
veículos. Informamos qual carro queremos consultar o preço, então a
classe factory nos retorna uma instância dele e então consultamos o
preço.
Note que poderiamos certamente passar a váriavel $Carro via um simples formulário HTML.
Vamos, então, dar uma olhada na implementação:
|
<?php
/**
Essa é nossa classe "abstrata". Note que uma classes abstratas não pode ser instanciada, ou seja, não há objatos que possam ser construídos diretamente de sua definição.
Classes abstratas deverão ser concretizadas em classes derivadas.
*/
Abstract Class Carro {
/**
A palavra-chave protected restringe a visibilidade do membro modificado, atributo ou
método, de forma que classes não-relacionadas não possam acessá-lo. Objetos da própria
classe, de classes derivadas desta.
*/
protected $valor;
public function getPreco() {
return $this->valor;
}
}
// Classes que herdam caracteristicas da classe pai.
Class Vectra extends Carro {
public function Vectra() {
return $this->valor = 30000;
}
}
Class Omega extends Carro {
public function Omega() {
return $this->valor = 50000;
}
}
Class Golf extends Carro {
public function Golf() {
return $this->valor = 35000;
}
}
Class Gol extends Carro {
public function Gol() {
return $this->valor = 20000;
}
}
//Note que uma classe definida como final não pode ser extendida.
Final Class CarroFactory {
public static function GetCarro ($TCarro){
If (!$TCarro)
return null;
else if( $TCarro=="Vectra" )
return new Vectra();
else if( $TCarro=="Omega" )
return new Omega();
else if( $TCarro=="Golf" )
return new golf();
else if( $TCarro=="Gol" )
return new gol();
}
}
$Carro = "Gol";
print $Carro." - R$ " . ( CarroFactory::GetCarro($Carro)->getPreco() );
/** Veja que não precisamos utilizar nesse exemplo FACTORY um construtor!
Obs: Construtor - > é apenas invocado no momento da criação do objeto através do operador new.
*/
?>
|
|
|
|