Design Pattern Delegation | Blog do Xorna

Design Pattern Delegation

Postado por xorna em December 5th, 2007 salvo em PHP, Padrões, Software Livre

Neste 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

Clicky Web Analytics