Design Pattern Delegation
Postado por xorna em December 5th, 2007 salvo em PHP, Padrões, Software LivreNeste artigo estarei abordando o Padrão de Projeto conhecido como delagation, ou seja, delegar ou passar a responsabilidade de uma ação para alguém. Este conceito é usado para implementar o padrão strategy, que substancialmente se resume em definir e encapsular uma famÃlia de algoritmos e os torna intercambiáveis.
No exemplo abaixo, utilizarei três classes individuais e uma que vai usar os métodos das três classes como se fossem seus.
<?php
## Classe Pessoa FÃsica
class pessoaFisica{
public function __construct(){}
public function busca($cpf){
# Aqui ele estará consultando alguém para buscar a pessoa que tenha o cpf
print “Pessoa FÃsica documento “.$cpf;
}
}## Classe Pessoa JurÃdica
class pessoaJuridica{
public function __construct(){}
public function busca($cnpj){
print “Pessoa JurÃdica documento “.$cnpj;
}
}## Classe BuscaPessoa
# Serve para buscar pessoas FÃsicas e JurÃdicas a partir do nº do seu documento
class buscaPessoa{
public function __construct(){}
## Quando for chamado algum método não declarado na classe,
# Ele chamará o __call, que tratará do chamado
public function __call($metodo, $parametro){
# Caso seja enviado um vetor
if(is_array($parametro)){
$parametro = implode($parametro);
}
## Aqui utilizei switch por preferencia pessoal
# mas pode ser utilizado if() sem problemas
switch($metodo){
# Caso seja chamada a busca por pessoa fisica ele executará até o próximo break;
case ‘fisica’:
$pessoa = new pessoaFisica();
$pessoa->busca($parametro);
break;
# Caso seja chamada a busca por pessoa JurÃdica ele executará até o próximo break;
case ‘juridica’:
$pessoa = new pessoaJuridica();
$pessoa->busca($parametro);
break;
default:
# Caso nenhuma das duas for chamada, pode-se executar alguma coisa no default.
break;
}
}
}
# Instanciando um Objeto da Classe buscaPessoa.
$busca = new buscaPessoa();
# Fazendo a busca por uma pessoa FÃsica
$busca->fisica(123);
print “<br />”;
# Fazendo a busca por uma pessoa JurÃdica
$busca->juridica(343);?>
Então, cada vez que for chamada a execução de um método não declarado na classe buscaPessoa, pode ser feito um tratamento para que ele delegue essa responsabilidade para outra classe.

Deixe um Comentário